OC语言 - NSDate | NSCalendar

NSDate | NSDateFormatter

1 - NSDate 是 Cocoa 中用于处理日期和时间的基础类,封装了某一给定的时刻(含日期、时间、时区)。NSTimeInterval 用来表⽰以秒为单位的时间间隔,可以使用 -initWithTimeIntervalSinceNow: 方法

NSDate *tomorrowDate  = [[NSDate alloc] initWithTimeIntervalSinceNow:24 * 60 * 60];
NSDate *yesterdayDate = [[NSDate alloc] initWithTimeIntervalSinceNow:-1 * 24 *60 *60];
NSTimeInterval showtime = [tomorrowDate timeIntervalSinceDate:yesterdayDate];
NSLog(@"%f",showtime);

2 - NSDateFormatter 是⽇期格式类,它可以实现 NSString 和 NSDate 之间互转

 1 // 获取当前设备时间
 2 NSDate *date01 = [NSDate date];
 3 NSLog(@"%@",date01);
 4 
 5 // 日期格式化
 6 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 7 [formatter setDateFormat:@"yyyy-MM-d EEEE aa HH:mm:ss.SS"];// 日期格式(很重要)
 8 NSString *strDate = [formatter stringFromDate:date01];
 9 NSLog(@"%@",strDate);
10 
11 NSDate *date02 = [NSDate dateWithTimeIntervalSinceNow:3600];// 获取 N 秒后的时间
12 NSLog(@"%@",date02);
13 
14 // 时间戳
15 NSString *strDate01 = @"20150713185656";
16 NSDateFormatter *formatter01 = [[NSDateFormatter alloc] init];
17 [formatter01 setDateFormat:@"yyyyMMddHHmmss"];// 时间戳格式要和此格式匹配
18 NSDate *getDate = [formatter01 dateFromString:strDate01];
19 NSLog(@"%@",getDate);
20 
21 
22 NSDate *currentDate = [NSDate date];
23 // 获取两个时间的时间差
24 NSTimeInterval secondTime = [currentDate timeIntervalSinceDate:getDate];
25 if (secondTime <=300&&secondTime>0) {
26     NSLog(@"刚刚");
27 }else if (secondTime > 300 && secondTime <= 3600){
28     NSLog(@"%d分钟前",(int)secondTime/60);
29 }else if (secondTime > 3600 && secondTime <= 86400){
30     NSLog(@"%d小时前",(int)secondTime/3600);
31 }else if (secondTime > 86400 && secondTime <= 259200){
32     NSLog(@"%d天前",(int)secondTime/86400);
33 }else{
34     [formatter setDateFormat:@"yyyy-MM-dd a HH:mm:ss"];
35     NSString * date = [formatter stringFromDate:getDate];
36     NSLog(@"%@",date);
37 }
38 
39 // 获取从 1970 年到现在时间流失的秒数
40 NSDate *currentDate8 = [NSDate date];
41 NSTimeInterval seconds5 = [currentDate8 timeIntervalSince1970];
42 NSLog(@"%.1f秒",seconds5);
43 
44 // 传入一个从 1970 年流失的秒数
45 NSString *dateSecondsString = @"2373453876";
46 NSDate *date = [NSDate dateWithTimeIntervalSince1970:[dateSecondsString doubleValue]];
47 NSLog(@"%@",date);
48 NSDateFormatter *formatter7 = [[NSDateFormatter alloc] init];
49 [formatter7 setDateFormat:@"G yyyy-MM-dd EEEE aa HH:mm:ss.SS"];
50 NSString *datestring = [formatter7 stringFromDate:date];
51 NSLog(@"%@",datestring);
52 
53 
54 // 模拟淘宝倒计时
55 NSString *dateString = @"2028-08-19 12:00:00";
56 NSDateFormatter *formatter6 = [[NSDateFormatter alloc] init];
57 [formatter6 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
58 NSDate *getDate6 = [formatter6 dateFromString:dateString];
59 
60 NSDate *nowDate = [NSDate date];
61 NSTimeInterval seconds = [getDate6 timeIntervalSinceDate:nowDate];
62 
63 int day = (int)seconds/86400;
64 int hour = (int) seconds % 86400 / 3600;
65 int minute = (int) seconds % 3600 / 60;
66 int second = (int)seconds % 60;
67 NSLog(@"距离团购结束,还有%d天%d小时%d分钟%d秒",day,hour,minute,second);

NSCalendar

1 - NSCalendar 主要用来确定日历单位(比如年代、年份和工作日)和绝对时间点之间的关系,并且提供计算和比较日期的功能

 1     // 当前时间
 2     NSDate *currentDate = [NSDate date];
 3     // NSCalendar
 4     NSCalendar *calendarDefault = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
 5     [calendarDefault components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:currentDate];
 6     
 7     NSDateComponents *adcompsDefault = [[NSDateComponents alloc] init];
 8     [adcompsDefault setDay:-7];// 前 7 天
 9     //[adcompsDefault setHour:6];// 后 6 小时
10     
11     // 计算
12     NSDate *newCurrentDate = [calendarDefault dateByAddingComponents:adcompsDefault toDate:currentDate options:0];
13     NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
14     [formatter setDateFormat:@"yyyy-MM-dd"];// 时间格式:yyyy-MM-dd HH:mm:ss
15     // 显示前 7 天的日期
16     NSLog(@"%@",[formatter stringFromDate:newCurrentDate]);

小结

1 - 时间格式说明

① 时间分隔符 : 在格式化时间值时分隔⼩时、分钟和秒

② Y 是以周为单位,如果一周结束后剩下的几天就会计算到下一年中;y是标准的年份,所以一般时间转换尽量用 y

③ ⽇期分隔符 / 在某些区域设置中可以使⽤其他字符表⽰⽇期分隔符 - 。⽇期分隔符在格式化⽇、⽉和年

④ % ⽤于表明不论尾随什么字母,随后字符都应该以单字母格式读取。也⽤于表明单字母格式应以⽤户定义格式读取

⑤ d 将⽇显⽰为不带前导零的数字,如 1;dd 将⽇显⽰为带前导零的数字,如 01

⑥ EEE 将⽇显⽰为缩写形式,如 Sun;EEEE 将⽇显⽰为全名,例如 Sunday

⑦ M 将⽉份显⽰为不带前导零的数字,如⼀⽉表⽰为 1;MM 将⽉份显⽰为带前导零的数字,如 01/12/01;MMM 将⽉份显⽰为缩写形式,如 Jan;  MMMM 将⽉份显⽰为完整⽉份名,如 January

⑧ gg 显⽰时代/纪元字符串,如 A.D.

⑨ h 使⽤ 12 ⼩时制将⼩时显⽰为不带前导零的数字,如 1:15:15 PM

 

posted on 2018-08-28 20:13  低头捡石頭  阅读(55)  评论(0编辑  收藏  举报

导航