IOS日期转为今天昨天形式
近期项目有类似QQ空间展示动态的UI,模仿了QQ空间的时间显示。在此记录,以备查阅。
这是QQ空间的ui:
时间显示为:
1.今天-->今天 xx:xx(今天 15:39)
2.昨天-->昨天 xx:xx(昨天 06:00)
3.前天-->前天 xx:xx(前天 19:00)
4.同一年, 比如:同一年的一月三号-->01-03 xx:xx(01-03 12:29)
5.不在同一年 --> xxxx-xx-xx(2014-12-12)
程序执行效果例如以下。下面为简单的測试。没有ui界面:
- /**
- * 仿QQ空间时间显示
- * @param string eg:2015年5月24日 02时21分30秒
- */
- - (NSString *)format:(NSString *)string{
- NSDateFormatter *inputFormatter= [[NSDateFormatter alloc] init];
- [inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] ];
- [inputFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];
- NSDate*inputDate = [inputFormatter dateFromString:string];
- //NSLog(@"startDate= %@", inputDate);
- NSDateFormatter *outputFormatter= [[NSDateFormatter alloc] init];
- [outputFormatter setLocale:[NSLocale currentLocale]];
- [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
- //get date str
- NSString *str= [outputFormatter stringFromDate:inputDate];
- //str to nsdate
- NSDate *strDate = [outputFormatter dateFromString:str];
- //修正8小时的差时
- NSTimeZone *zone = [NSTimeZone systemTimeZone];
- NSInteger interval = [zone secondsFromGMTForDate: strDate];
- NSDate *endDate = [strDate dateByAddingTimeInterval: interval];
- //NSLog(@"endDate:%@",endDate);
- NSString *lastTime = [self compareDate:endDate];
- NSLog(@"lastTime = %@",lastTime);
- return str;
- }
- -(NSString *)compareDate:(NSDate *)date{
- NSTimeInterval secondsPerDay = 24 * 60 * 60;
- //修正8小时之差
- NSDate *date1 = [NSDate date];
- NSTimeZone *zone = [NSTimeZone systemTimeZone];
- NSInteger interval = [zone secondsFromGMTForDate: date1];
- NSDate *localeDate = [date1 dateByAddingTimeInterval: interval];
- //NSLog(@"nowdate=%@\nolddate = %@",localeDate,date);
- NSDate *today = localeDate;
- NSDate *yesterday,*beforeOfYesterday;
- //今年
- NSString *toYears;
- toYears = [[today description] substringToIndex:4];
- yesterday = [today dateByAddingTimeInterval: -secondsPerDay];
- beforeOfYesterday = [yesterday dateByAddingTimeInterval: -secondsPerDay];
- // 10 first characters of description is the calendar date:
- NSString *todayString = [[today description] substringToIndex:10];
- NSString *yesterdayString = [[yesterday description] substringToIndex:10];
- NSString *beforeOfYesterdayString = [[beforeOfYesterday description] substringToIndex:10];
- NSString *dateString = [[date description] substringToIndex:10];
- NSString *dateYears = [[date description] substringToIndex:4];
- NSString *dateContent;
- if ([dateYears isEqualToString:toYears]) {//同一年
- //今 昨 前天的时间
- NSString *time = [[date description] substringWithRange:(NSRange){11,5}];
- //其它时间
- NSString *time2 = [[date description] substringWithRange:(NSRange){5,11}];
- if ([dateString isEqualToString:todayString]){
- dateContent = [NSString stringWithFormat:@"今天 %@",time];
- return dateContent;
- } else if ([dateString isEqualToString:yesterdayString]){
- dateContent = [NSString stringWithFormat:@"昨天 %@",time];
- return dateContent;
- }else if ([dateString isEqualToString:beforeOfYesterdayString]){
- dateContent = [NSString stringWithFormat:@"前天 %@",time];
- return dateContent;
- }else{
- return time2;
- }
- }else{
- return dateString;
- }
- }
IOS日期转为今天昨天形式的更多相关文章
- BIP_开发案例07_将原有Report Builer报表全部转为XML Publisher形式(案例)
2014-05-31 Created By BaoXinjian
- R语言将5位数字日期转为正常日期
R语言中用double表示日期,即从1970-1-1距离给定日期的天数,将5位数字日期转为正常日期格式的方法 as.Date(16543,origin='1970-1-1')
- placeholder的字体样式改变,滚动条的颜色改变,ios日期兼容
placeholder:::-webkit-input-placeholder { color: rgba(153, 153, 153, 0.541);font-size:12px;}:-moz-pl ...
- 【C#】string格式的日期转为DateTime类型及时间格式化处理方法
日期格式:yyyyMMdd HH:mm:ss(注意此字符串的字母大小写很严格) yyyy:代表年份 MM: 代表月份 dd: 代表天 HH: 代表小时(24小时制) mm: 代表分钟 ss: 代表秒 ...
- Java与IOS日期格式
//JAVA日期格式 Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM- ...
- PostgreSQL将日期转为当前年、月、日的函数date_trunc
PostgreSQL将日期转为年.月.日的函数date_trunc: 当前年: select date_trunc('year',now()) 当前月: select date_trunc('mo ...
- IOS 日期的简洁格式展示
首先我要解释一下标题的意义,日期的简洁格式展示,之所以简介,是因为让人一目了然,不需要思考是什么时候. 在详细一点就是我们在微信朋友圈中 所看到的时间格式. 例如:刚刚 -几分钟前-几小时前等等. 今 ...
- MySql中使用日期函数获取昨天的数据
.body-classic{ color:#444; font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Rom ...
- Swift iOS 日期操作:NSDate、NSDateFormatter
1.日期(NSDate) // 1.初始化 // 初始化一个当前时刻对象 var now = NSDate() // 初始化一个明天当前时刻对象 var tomorrow = NSDate(timeI ...
随机推荐
- ASP.NET WebAPI RC 竟然不支持最常用的json传参
壮士断腕(WCF Web API),为的是 ASP.NET Web API 的横空出世,再加上它的开放(开源),于是对之产生了一点点痴情,并写下了HttpClient + ASP.NET Web AP ...
- vue脚手架3.0的搭建
一.安装node 打开cmd输入node -v查看是否安装成功 显示node版本号表示安装成功,显示‘node’不是内部或外部命令表示未安装node.node安装地址:http://nodejs.cn ...
- 【2017 Multi-University Training Contest - Team 3】RXD and math
[Link]: [Description] [Solution] 发现1010mod(109+7)=999999937; 猜测答案是nk 写个快速幂; 注意对底数先取模; [NumberOf WA] ...
- 27.mutex跨进程通信
创建互斥量mutex HANDLE mutex = CreateMutexA(NULL, TRUE, name); 根据id打开mutex HANDLE mutex = OpenMutexA(MUTE ...
- 洛谷 P1109 学生分组
P1109 学生分组 题目描述 有N组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界R和下界L(L<=R),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使 ...
- Caused by: java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.getServletContext()L
在做项目的时候,出现Caused by: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletCo ...
- GraphX 图数据建模和存储
背景 简单分析一下GraphX是怎么为图数据建模和存储的. 入口 能够看GraphLoader的函数. def edgeListFile( sc: SparkContext, path: String ...
- PHPki
PHPki PHPki是一个基于开放源码Web的应用程序,用来管理遵守HIPAA的多代理"公钥基础结构".它可以用于创建X.509数字证书,并主要为支持S/MIME的电子邮件客户端 ...
- js进阶 14-7 jquery的ajax部分为什么需要对表单进行序列化
js进阶 14-7 jquery的ajax部分为什么需要对表单进行序列化 一.总结 一句话总结:如果用ajax传递表单的数据,如果不进行表单的序列化,要一个参数一个参数的写,太麻烦,序列化的话,一句代 ...
- 1.2 Use Cases中 Event Sourcing官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Event Sourcing 事件采集 Event sourcing is a st ...