调用
NSLog(@"%@",[self formateDate:@"2016-05-13 17:30" withFormate:@"YYYY-MM-dd HH:mm"]);
实现
/**
和当前时间比较
1)1分钟以内 显示 : 刚刚
2)1小时以内 显示 : X分钟前
3)今天或者昨天 显示 : 今天 09:30 昨天 09:30
4) 今年 显示 : 09月12日
5) 大于本年 显示 : 2013/09/09
*/
- (NSString *)formateDate:(NSString *)dateString withFormate:(NSString *) formate
{
@try {
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formate];
NSDate * nowDate = [NSDate date];
// 将需要转换的时间转换成 NSDate 对象
NSDate * needFormatDate = [dateFormatter dateFromString:dateString];
// 取当前时间和转换时间两个日期对象的时间间隔
// 这里的NSTimeInterval 并不是对象,是基本型,其实是double类型,是由c定义的: typedef double NSTimeInterval;
NSTimeInterval time = [nowDate timeIntervalSinceDate:needFormatDate];
// 再然后,把间隔的秒数折算成天数和小时数:
NSString *dateStr = @"";
if (time <= 60) { // 1分钟以内的
dateStr = @"刚刚";
}else if(time <= 60*60){ // 一个小时以内的
int mins = time/60;
dateStr = [NSString stringWithFormat:@"%d分钟前",mins];
}else if(time <= 60*60*24*2){ // 在两天内的
[dateFormatter setDateFormat:@"YYYY/MM/dd"];
NSString * need_yMd = [dateFormatter stringFromDate:needFormatDate];
NSString *now_yMd = [dateFormatter stringFromDate:nowDate];
[dateFormatter setDateFormat:@"HH:mm"];
if ([need_yMd isEqualToString:now_yMd]) {
// 在同一天
dateStr = [NSString stringWithFormat:@"今天 %@",[dateFormatter stringFromDate:needFormatDate]];
}else{
// 昨天
dateStr = [NSString stringWithFormat:@"昨天 %@",[dateFormatter stringFromDate:needFormatDate]];
}
}else {
[dateFormatter setDateFormat:@"yyyy"];
NSString * yearStr = [dateFormatter stringFromDate:needFormatDate];
NSString *nowYear = [dateFormatter stringFromDate:nowDate];
if ([yearStr isEqualToString:nowYear]) {
// 在同一年
[dateFormatter setDateFormat:@"MM月dd日"];
dateStr = [dateFormatter stringFromDate:needFormatDate];
}else{
[dateFormatter setDateFormat:@"yyyy/MM/dd"];
dateStr = [dateFormatter stringFromDate:needFormatDate];
}
}
return dateStr;
}
@catch (NSException *exception) {
return @"";
}
}
更准确的方法
调用方法:
[self formateDate:@"2016-05-30 21:57:46" withFormat:@"YYYY-MM-dd HH:mm:ss"];
实现:
- (void)formateDate:(NSString *)dateString withFormat:(NSString *) formate{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formate];
NSDate * nowDate = [NSDate date];
NSDate * needFormatDate = [dateFormatter dateFromString:dateString];
NSTimeInterval secondsPerDay = 24 * 60 * 60;
NSDate *yearsterDay = [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay];
NSTimeInterval thirdPerDay = 48 * 60 * 60;
NSDate * qian = [[NSDate alloc] initWithTimeIntervalSinceNow:-thirdPerDay];
//假设这是你要比较的date:NSDate *yourDate = ……
//日历
NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents* comp1 = [calendar components:unitFlags fromDate:needFormatDate];
NSDateComponents* comp2 = [calendar components:unitFlags fromDate:yearsterDay];
NSDateComponents * comp3 = [calendar components:unitFlags fromDate:qian];
if ( comp1.year == comp2.year && comp1.month == comp2.month && comp1.day == comp2.day) {
NSLog(@"昨天");
}
if (comp1.year == comp3.year && comp1.month == comp3.month && comp1.day == comp3.day) {
NSLog(@"前天");
}
}
本文介绍了一种iOS应用中实现相对时间显示的方法,包括如何将特定日期格式的字符串转换为NSDate对象,并通过计算与当前时间的时间差来确定显示形式,如“刚刚”、“X分钟前”等。
4481

被折叠的 条评论
为什么被折叠?



