gpt4 book ai didi

ios - NSDateFormatter - "Yesterday, 3:30 PM"

转载 作者:行者123 更新时间:2023-11-29 02:57:36 26 4
gpt4 key购买 nike

我想在我的 iOS 应用程序中为我的日期获取特定格式。基本上,它是一个短信历史列表。如果文本是在一周前收到的,我想用以下格式显示日期:

“今天下午 3:30”

“昨天凌晨 3:28”

“星期一,下午 1:12”

等等

如何使用 NSDateFormatter 来获得输出?我尝试了几种组合但没有成功,主要问题在于第一部分;今天/昨天等

非常感谢!

编辑:此时这是我的代码。 (白天部分不工作,我很难让“dateFromTemplate”和“timeStyle”同时工作。)

NSString *dateComponents = @"eee";
formatter=[[NSDateFormatter alloc] init];
formatter.timeStyle=NSDateFormatterShortStyle;
[formatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:[NSLocale autoupdatingCurrentLocale]]];
formatter.doesRelativeDateFormatting=YES;
formatter.locale=[NSLocale autoupdatingCurrentLocale];

最佳答案

如果你看一下 NSDateComponents,你自己实现一个很容易。但是,有一些漂亮的库可以做到这一点。看到这个,看起来不错https://github.com/kevinlawler/NSDate-TimeAgo 。这是我为应用程序编写的代码,您可以根据需要对其进行扩展。这是 NSDate 上的一个类别。

@implementation NSDate(DateAgo)

+ (NSDate*)dateEarlierToDate:(NSDate*)date byDays:(int)days{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:-days];
return [calendar dateByAddingComponents:components toDate:date options:0];
}


-(NSString*)timeAgoFromReference{
static NSDateFormatter *formatter;
if(!formatter){
formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
}
NSDate *now = [NSDate date];
NSTimeInterval timeIntervalFromNow = [now timeIntervalSinceDate:self];
if(timeIntervalFromNow/(60*60*24) > 9){
return [formatter stringFromDate:self];
}else{
return [self timeAgoFromInterval:timeIntervalFromNow];
}

}
-(NSString*)timeAgoFromInterval:(NSTimeInterval)interval{
if(interval < 1){
return @"A second ago";
}else if(interval < 5){
return @"5 seconds ago";
}else if(interval < 10){
return @"10 seconds ago";
}else if(interval < 15){
return @"15 seconds ago";
}else if(interval < 30){
return @"30 seconds ago";
}else if(interval < 60){
return @"1 minute ago";
}else if(fabs(interval/60) < 60 ){
return [NSString stringWithFormat:@"%d minutes ago",(int)(interval/60)];
}else{
int timeInHours = interval/(60*60);
if(timeInHours == 1){
return @"1 hour ago";
}else if(timeInHours < 24){
return [NSString stringWithFormat:@"%d hours ago",timeInHours];
}else{
int timeInDay = timeInHours/24;
if(timeInDay == 1){
return @"1 day ago";
}else{
return [NSString stringWithFormat:@"%d days ago", timeInDay];
}
}
}
return @"0";
}
@end

如果你有一些约会,你可以这样调用它,

NSString *dateAgo = [date timeAgoFromReference];

这很简单且易于理解,您可以自己轻松地添加更多功能

关于ios - NSDateFormatter - "Yesterday, 3:30 PM",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com