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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)