NSDate 实现时间格式刚刚、几分钟前、几小时前、昨天、MM-dd HH:mm:ss
2016-02-28 21:06
309 查看
在微博、QQ 或者各种可以发帖的软件中可以发现 发帖时间根据当前时间显示不同的时间格式
( 刚刚、几分钟前、几小时前、昨天、MM-dd HH:mm:ss、 yyyy-MM-dd HH:mm:ss)
第一种方法:
- (void)testDate:(NSString *)create_time
{
//
当前时间
NSDate *now = [NSDatedate];
//
发帖时间
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
//
设置日期格式(y:年,M:月,d:日,H:时,m:分,s:秒)
formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";
NSDate *create = [formatter
dateFromString:create_time];
NSTimeInterval delta = [now
timeIntervalSinceDate:create];
}
把时间转化成固定的时间字符串格式, 然后 [now timeIntervalSinceDate:create]
获取当前时间与某一特定时间的时间差值,转化成多少秒 然后再根据多少秒 得到跟现在的时间对比 显示不同是时间样式
显然这种方式会让不少人恶心的
第二种:
- (void)testDate:(NSString *)create_time
{
//
日期格式化类
NSDateFormatter *fmt = [[NSDateFormatteralloc]init];
//
设置日期格式(y:年,M:月,d:日,H:时,m:分,s:秒)
fmt.dateFormat =@"yyyy-MM-dd HH:mm:ss";
//
当前时间
NSDate *now = [NSDatedate];
//
发帖时间
NSDate *create = [fmt
dateFromString:create_time];
XMGLog(@"%@", [nowdeltaFrom:create]);
//
日历
NSCalendar *calendar = [NSCalendarcurrentCalendar];
//
比较时间
NSCalendarUnit unit =NSCalendarUnitDay |NSCalendarUnitMonth |NSCalendarUnitYear
|NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;
NSDateComponents *cmps = [calendar
components:unit fromDate:create
toDate:now options:0];
NSLog(@"%@ %@", create, now);
NSLog(@"%zd %zd %zd %zd %zd %zd", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute,
cmps.second);
//
获得NSDate的每一个元素
NSInteger year = [calendar component:NSCalendarUnitYear fromDate:now];
NSInteger month = [calendarcomponent:NSCalendarUnitMonthfromDate:now];
NSInteger day = [calendarcomponent:NSCalendarUnitDayfromDate:now];
NSDateComponents *cmps = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:now];
XMGLog(@"%zd %zd %zd", cmps.year, cmps.month, cmps.day);
}
在NSDate中有一个日历 可以很方便的解决这个问题
为了以后我们可以重用这个方法 首先我们先为NSDate 建一个分类
/**
* 比较from
和self 的时间差值
*/
- (NSDateComponents *) deltaFrom:(NSDate *)from {
//
日历
NSCalendar *calender = [NSCalendarcurrentCalendar];
//
比较时间
NSCalendarUnit unit =NSCalendarUnitDay |NSCalendarUnitYear |NSCalendarUnitMonth
|NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;
return [calender
components:unit fromDate:from
toDate:self
options:0];
}
/**
* 判断是否是今年
*/
- (BOOL)isThisYear {
//
日历
NSCalendar *calender = [NSCalendarcurrentCalendar];
NSInteger nowYear = [calendercomponent:NSCalendarUnitYearfromDate:[NSDatedate]];
NSInteger selfYear = [calendercomponent:NSCalendarUnitYearfromDate:self];
return nowYear == selfYear;
}
/**
* 判断是否是今天
*/
- (BOOL)isToday {
//
日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat =
@"yyyy-MM-dd";
NSString *nowString = [formatter
stringFromDate:[NSDate
date]];
NSString *selfString = [formatter
stringFromDate:self];
// 判断当前日期和传过来的日期是否是同一天
return nowString == selfString;
}
/**
* 判断是否是昨天
*/
- (BOOL)isYesterDay {
// 日期格式化类把当前时间转化成固定的格式
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat =
@"yyyy-MM-dd";
/**[formatter stringFromDate:[NSDate date]]把当前的时间格式转化成上面只有年-月-日的时间字符串
* formatter dateFromString:
再把上面的固定时间字符串改成 date
类型
*/
NSDate *nowDate = [formatter
dateFromString:[formatter stringFromDate:[NSDatedate]]];
NSDate *selfDate = [formatter
dateFromString:[formatter stringFromDate:self]];
//
日历
NSCalendar *calender = [NSCalendarcurrentCalendar];
NSDateComponents *components = [calendercomponents:NSCalendarUnitYear |NSCalendarUnitMonth
| NSCalendarUnitDayfromDate:selfDatetoDate:nowDateoptions:0];
//
return components.year ==0 && components.month ==0 && components.day
==1;
}
然后在Model 中重写发帖时间的get 方法
- (NSString *)create_time {
//
日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";
//
帖子的创建时间
NSDate *create = [formatter
dateFromString:_create_time];
if (create.isThisYear) {//今年
if (create.isToday) {//今天
NSDateComponents *compoents = [[NSDatedate]deltaFrom:create];
if (compoents.hour > 1) {
return [NSStringstringWithFormat:@"%ld小时前",compoents.hour];
} else
if (compoents.minute >=
1) {
return [NSStringstringWithFormat:@"%ld分钟前",compoents.minute];
} else {
return
@"刚刚";
}
} else if (create.isYesterDay){//昨天
formatter.dateFormat =
@"昨天 HH:mm:ss";
return [formatter
stringFromDate:create];
} else { //其他
formatter.dateFormat =
@"MM-dd HH:mm:ss";
return [formatter
stringFromDate:create];
}
} else { //
不是今年
return_create_time;
}
}
( 刚刚、几分钟前、几小时前、昨天、MM-dd HH:mm:ss、 yyyy-MM-dd HH:mm:ss)
第一种方法:
- (void)testDate:(NSString *)create_time
{
//
当前时间
NSDate *now = [NSDatedate];
//
发帖时间
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
//
设置日期格式(y:年,M:月,d:日,H:时,m:分,s:秒)
formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";
NSDate *create = [formatter
dateFromString:create_time];
NSTimeInterval delta = [now
timeIntervalSinceDate:create];
}
把时间转化成固定的时间字符串格式, 然后 [now timeIntervalSinceDate:create]
获取当前时间与某一特定时间的时间差值,转化成多少秒 然后再根据多少秒 得到跟现在的时间对比 显示不同是时间样式
显然这种方式会让不少人恶心的
第二种:
- (void)testDate:(NSString *)create_time
{
//
日期格式化类
NSDateFormatter *fmt = [[NSDateFormatteralloc]init];
//
设置日期格式(y:年,M:月,d:日,H:时,m:分,s:秒)
fmt.dateFormat =@"yyyy-MM-dd HH:mm:ss";
//
当前时间
NSDate *now = [NSDatedate];
//
发帖时间
NSDate *create = [fmt
dateFromString:create_time];
XMGLog(@"%@", [nowdeltaFrom:create]);
//
日历
NSCalendar *calendar = [NSCalendarcurrentCalendar];
//
比较时间
NSCalendarUnit unit =NSCalendarUnitDay |NSCalendarUnitMonth |NSCalendarUnitYear
|NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;
NSDateComponents *cmps = [calendar
components:unit fromDate:create
toDate:now options:0];
NSLog(@"%@ %@", create, now);
NSLog(@"%zd %zd %zd %zd %zd %zd", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute,
cmps.second);
//
获得NSDate的每一个元素
NSInteger year = [calendar component:NSCalendarUnitYear fromDate:now];
NSInteger month = [calendarcomponent:NSCalendarUnitMonthfromDate:now];
NSInteger day = [calendarcomponent:NSCalendarUnitDayfromDate:now];
NSDateComponents *cmps = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:now];
XMGLog(@"%zd %zd %zd", cmps.year, cmps.month, cmps.day);
}
在NSDate中有一个日历 可以很方便的解决这个问题
为了以后我们可以重用这个方法 首先我们先为NSDate 建一个分类
/**
* 比较from
和self 的时间差值
*/
- (NSDateComponents *) deltaFrom:(NSDate *)from {
//
日历
NSCalendar *calender = [NSCalendarcurrentCalendar];
//
比较时间
NSCalendarUnit unit =NSCalendarUnitDay |NSCalendarUnitYear |NSCalendarUnitMonth
|NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;
return [calender
components:unit fromDate:from
toDate:self
options:0];
}
/**
* 判断是否是今年
*/
- (BOOL)isThisYear {
//
日历
NSCalendar *calender = [NSCalendarcurrentCalendar];
NSInteger nowYear = [calendercomponent:NSCalendarUnitYearfromDate:[NSDatedate]];
NSInteger selfYear = [calendercomponent:NSCalendarUnitYearfromDate:self];
return nowYear == selfYear;
}
/**
* 判断是否是今天
*/
- (BOOL)isToday {
//
日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat =
@"yyyy-MM-dd";
NSString *nowString = [formatter
stringFromDate:[NSDate
date]];
NSString *selfString = [formatter
stringFromDate:self];
// 判断当前日期和传过来的日期是否是同一天
return nowString == selfString;
}
/**
* 判断是否是昨天
*/
- (BOOL)isYesterDay {
// 日期格式化类把当前时间转化成固定的格式
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat =
@"yyyy-MM-dd";
/**[formatter stringFromDate:[NSDate date]]把当前的时间格式转化成上面只有年-月-日的时间字符串
* formatter dateFromString:
再把上面的固定时间字符串改成 date
类型
*/
NSDate *nowDate = [formatter
dateFromString:[formatter stringFromDate:[NSDatedate]]];
NSDate *selfDate = [formatter
dateFromString:[formatter stringFromDate:self]];
//
日历
NSCalendar *calender = [NSCalendarcurrentCalendar];
NSDateComponents *components = [calendercomponents:NSCalendarUnitYear |NSCalendarUnitMonth
| NSCalendarUnitDayfromDate:selfDatetoDate:nowDateoptions:0];
//
return components.year ==0 && components.month ==0 && components.day
==1;
}
然后在Model 中重写发帖时间的get 方法
- (NSString *)create_time {
//
日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";
//
帖子的创建时间
NSDate *create = [formatter
dateFromString:_create_time];
if (create.isThisYear) {//今年
if (create.isToday) {//今天
NSDateComponents *compoents = [[NSDatedate]deltaFrom:create];
if (compoents.hour > 1) {
return [NSStringstringWithFormat:@"%ld小时前",compoents.hour];
} else
if (compoents.minute >=
1) {
return [NSStringstringWithFormat:@"%ld分钟前",compoents.minute];
} else {
return
@"刚刚";
}
} else if (create.isYesterDay){//昨天
formatter.dateFormat =
@"昨天 HH:mm:ss";
return [formatter
stringFromDate:create];
} else { //其他
formatter.dateFormat =
@"MM-dd HH:mm:ss";
return [formatter
stringFromDate:create];
}
} else { //
不是今年
return_create_time;
}
}
相关文章推荐
- 24.最优布线问题(kruskal算法)
- 放弃使用jQuery实现动画
- 去除在页面上点击出现的大片蓝色
- 24.最优布线问题(kruskal算法)
- 24.最优布线问题(kruskal算法)
- 24.最优布线问题(kruskal算法)
- 24.最优布线问题(kruskal算法)
- 24.最优布线问题(kruskal算法)
- 1080. Graduate Admission (30)
- APK中java代码反编译
- 修饰符和内部类
- javascript & DHTML cookbook摘抄
- 实战——简易计算器
- Java的单根继承结构--优点
- 【每日算法】图算法(遍历&MST&最短路径&拓扑排序)
- 软考之排序算法(一)——插入排序
- git 版本控制和SourceTree的安装使用 eclipse 的egit 插件安装使用
- 关于印发浙江省推进城镇职工基本医疗保险制度改革意见的通知
- Git 学习笔记
- J2EE整合UCenter 首次注册同步登录与自动激活