一种:时间逻辑:

- (NSString *)created_at{

//    从后台返回的字符串格式:Mon Aug 03 09:17:31 +0800 2014,

//NSDateFormatter可以把NSDate转成字符串,也可以把字符串转成NSDate

//初始化一个时间格式化器

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

//指定时间格式化字符串-->是一个什么样的格式

formatter.dateFormat = @"EEE MMM dd HH:mm:ss z yyyy";

//    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

//如果是真机,一定要指定个这locale,标明这个时间是什么样标识

formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

//当前w创建的时间

NSDate *createDate = [formatter dateFromString:_created_at];

//    //取出当前时间

NSDate *currentDate = [NSDate date];

//拿着当前时间与create_at进行一个对比

//    if (是今年) {

if ([self isThisYearWithDate:createDate]) {

//是同一年

//判断是否是今天

if ([self isTodayWithDate:createDate]) {

//是今天

//如果创建时间加上60秒,大于当前时间,代表1分钟之内

NSDate *resultDate = [createDate dateByAddingTimeInterval:60];

if ([resultDate compare:currentDate] == NSOrderedDescending) {

//代表是1分钟之内

return @"刚刚";

}else{

//判断1小时之内

resultDate = [createDate dateByAddingTimeInterval:3600];

if ([resultDate compare:currentDate] == NSOrderedDescending) {

//代表1小时之内

//计算多少分钟前

NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];

//分钟数

NSInteger intervalMinute = interval/60;

return [NSString stringWithFormat:@"%zd分钟前",intervalMinute];

}else{

//几小时前

NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];

//分钟数

NSInteger intervalMinute = interval/3600;

return [NSString stringWithFormat:@"%zd小时前",intervalMinute];

}

}

//是不是1分钟之内

//是不是1小时之内

}else{

//如果是昨天-->昨天 11:11

if ([self isYesterdayWithDate:createDate]) {

//不是今天先这么去显示:08-01 15-03

formatter.dateFormat = @"昨天 HH:mm";

return [formatter stringFromDate:createDate];

}else{

//不是今天先这么去显示:08-01 15-03

formatter.dateFormat = @"MM-dd HH:mm";

return [formatter stringFromDate:createDate];

}

}

}else{

//不是今年:2014-05-05 09:17:31

formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

return [formatter stringFromDate:createDate];

}

}

/**

*  是否是与当前时间是同一年

*

*  @param date 传入对比的时间

*

*  @return <#return value description#>

*/

- (BOOL)isThisYearWithDate:(NSDate *)date{

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"yyyy";

//当前w创建的时间

NSDate *createDate = date;

//取出当前时间

NSDate *currentDate = [NSDate date];

//拿着创建时间与当前时间进行对比-->只格式化年份

formatter.dateFormat = @"yyyy";

//取出年份-->判断是否同一年,只要拿着年份进行对比一下,看一下是否一样

NSString *createDateYearStr = [formatter stringFromDate:createDate];

NSString *currentDateYearStr = [formatter stringFromDate:currentDate];

//对比年份的时间字符串,如果不是同一年的话返回NO

return [createDateYearStr isEqualToString:currentDateYearStr];

}

/**

*  判断与今天否是同一天,是否是今天

*

*  @param date

*

*  @return

*/

- (BOOL)isTodayWithDate:(NSDate *)date{

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

//拿着创建时间与当前时间进行对比-->只格式化年份-月份-天

formatter.dateFormat = @"yyyy-MM-dd";

//当前wei创建的时间

NSDate *createDate = date;

//取出当前时间

NSDate *currentDate = [NSDate date];

//取出年份-->判断是否是今天,

NSString *createDateYearStr = [formatter stringFromDate:createDate];

NSString *currentDateYearStr = [formatter stringFromDate:currentDate];

//对比年份的时间字符串,如果不是同一年的话返回NO

return [createDateYearStr isEqualToString:currentDateYearStr];

}

/**

*  与当前时间对比,判断是否是昨天

*

*  @param date <#date description#>

*

*  @return <#return value description#>

*/

- (BOOL)isYesterdayWithDate:(NSDate *)date{

//2014-09-30 10:00:00 创建时间

//2014-10-01 09:00:00 当前

NSDate *currentDate = [NSDate date];

//取出当前日历对象

NSCalendar *canlendar = [NSCalendar currentCalendar];

//NSCalendarUnit 对比单位-->要对比些什么东西

//设置对比对象

NSCalendarUnit unit = NSCalendarUnitYear|NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;

//时间比较的结果

NSDateComponents *components = [canlendar components:unit fromDate:date toDate:currentDate options:NSCalendarWrapComponents];

//对比两个时间的day差值是否为

//    NSLog(@"day=%zd,hour=%zd,minute=%zd,second=%zd",components.day,components.hour,components.minute,components.second);

return components.day == 1;

}

二种方式:

//重写time的getter 方法

// 1 判断addtime和当前的时间差

//如果时间差小于60分钟    返回 n分钟前

//如果超过60分钟 小于24小时   返回n小时前

//如果超过24小时     返回  月-日

- (NSString *)time{

//把json中的数字时间 转换成日期对象

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[self.addtime intValue]];

//计算date和当前的时间差

NSCalendar *calendar = [NSCalendar currentCalendar];

//获取两个时间相差的分钟

NSDateComponents *component = [calendar components:NSCalendarUnitMinute fromDate:date toDate:[NSDate date] options:0];

if (component.minute < 60) {

return [NSString stringWithFormat:@"%zd分钟前",component.minute];

}

//判断相差的小时

component = [calendar components:NSCalendarUnitHour fromDate:date toDate:[NSDate date] options:0];

if (component.hour < 24) {

return [NSString stringWithFormat:@"%zd小时前",component.hour];

}

//

NSDateFormatter *ndf = [NSDateFormatter new];

ndf.dateFormat = @"MM-dd";

return [ndf stringFromDate:date];

}

转载于:https://www.cnblogs.com/supersr/p/4856527.html

supersr--时间显示逻辑--NSDate+NSCalendar相关推荐

  1. java 友好时间显示_仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]...

    本文为原创分享,转载请注明出处. 1.引言 即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成"年/月/日 时: ...

  2. NSDate NSCalendar NSString之间的故事以及转换

    1.NSDate 和 NSString 之间的转换 这之间的转换主要依靠NSDateFormatter NSDate <------> NSString NSDateFormatter * ...

  3. iOS仿QQ空间时间显示

    最近项目有类似QQ空间展示动态的UI,模仿了QQ空间的时间显示,在此记录,以备查阅. 这是QQ空间的ui: 时间显示为: 1.今天-->今天 xx:xx(今天 15:39)   2.昨天--&g ...

  4. Java仿微信时间显示

    Java仿微信时间显示 需求 代码实现 1.dto类设计 2.controller层 3.service层 4.时间格式化(service层) 4.分组函数(service层) 总结 需求 微信聊天消 ...

  5. 基于51单片机实现时间显示及闹钟设置

    文章目录 一.介绍 二.原理 三.步骤 四.结果 五.结果分析 六.总结 一.介绍 本次为大学中的一次创新实验,当时老师叫我自己拿个单片机去玩,为了赶时间就做了个简单的时间显示和闹钟设置,因为比较简单 ...

  6. win10服务器权限修改时间,win10系统修改时间显示没权限的解决方案

    有关win10系统修改时间显示没权限的操作方法想必大家有所耳闻.但是能够对win10系统修改时间显示没权限进行实际操作的人却不多.其实解决win10系统修改时间显示没权限的问题也不是难事,小编这里提示 ...

  7. java 友好时间显示_java 友好的显示时间

    1.显示时间, 30秒以内显示刚刚 几分钟前显示几分钟前 今天时间显示时间,不显示年月日 昨天时间显示昨天+时间,不显示年月日 昨天以前显示具体的年月日 代码如下: public static Str ...

  8. F5配置irule,使其系统在X个时间段提供服务,其余时间显示维护页面

    为什么80%的码农都做不了架构师?>>>    ##F5使系统在X个时间内不提供服务,只显示维护页面 when HTTP_REQUEST {   set curtime [clock ...

  9. PHP CodeBase: 将时间显示为“刚刚”“n分钟/小时前”等

    为什么80%的码农都做不了架构师?>>>    在很多场合为了显示出信息的及时性,一般会将时间显示成"刚刚","5分钟前","3小时 ...

最新文章

  1. pytorch旧版安装
  2. 我的天,你工作5年了,连Java agent都不知道...
  3. 90后「V神」封神之路:4岁学编程,19岁创办以太坊,4年十亿身家!
  4. Altium Designer /DXP无网络铺铜:
  5. python 之 字符编码 和 中文显示
  6. 超硬核!11 个非常实用的 Python 和 Shell 拿来就用脚本实例!
  7. Oracle 11.2.0.2新特性——用户重命名(Rename User)
  8. tiny6410 pppd
  9. 负债的阶梯,你在第几层?
  10. 使用github+hexo搭建静态blog
  11. FCKeidtor的toolbarset的设置
  12. UE4 调整引擎功能的级别
  13. Nowcoder farm ( 树状数组、二维前缀和、二维偏序 )
  14. Golang 中 RSA 算法的使用
  15. 独家揭秘:用友云的新打算
  16. 形容等待时间长的句子_形容“等待时间长”的成语有哪些?
  17. springboot学习(下)
  18. Mac版本的PS2017、2018、2019、2020 合集
  19. 微光互联 TX800-U 扫码器无法输出中文到光标的问题
  20. 菜鸟学习 - Unity中的热更新 - Lua和C#通信

热门文章

  1. 根据功率计算用电量和电费
  2. redux-thunk的简单使用
  3. (15)javaScript入门
  4. 13 vue学习 package.json
  5. SPOJ - PHRASES Relevant Phrases of Annihilation —— 后缀数组 出现于所有字符串中两次且不重叠的最长公共子串...
  6. self.a 和 _a 的区别
  7. .net HtmlParser初步使用研究
  8. Jquery调用webService的四种方法 【转载】
  9. unity3d做会减少的血条_2019-2020年Unity3D——人物主角的血条-经验的显示.doc
  10. 使用nginx后如何在web应用中获取用户ip及原理解释