我想在我的iOS应用中获取我日期的特定格式。 基本上,它是文本消息历史列表。如果文本是在不到一周前收到的,我想用以下格式显示日期:
"今天下午3:30"
"昨天,3:28 AM"
"星期一,下午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];
答案 0 :(得分:1)
如果你看看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];
这很简单易懂,您可以轻松地为此添加更多功能
答案 1 :(得分:0)
创建日期组件并将日期值指定为-1,您可以通过将日期组件添加到当前日期来查找昨天的日期 -
NSDateComponents *NsD = [[NSDateComponents alloc] init];
NsD.day = -1;
NSDate *yesterday = [[NSCalendar currentCalendar] dateByAddingComponents:NsD toDate:dateNow options:0];
您可以使用日期格式化程序
来获取时间NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"];
NSString *dateStr = [formatter stringFromDate:[NSDate date]];