常用的时间格式
G: 公元时代,例如AD公元yy: 年的后2位yyyy: 完整年MM: 月,显示为1-12,带前置0MMM: 月,显示为英文月份简写,如 JanMMMM: 月,显示为英文月份全称,如 Janualydd: 日,2位数表示,如02d: 日,1-2位显示,如2,无前置0EEE: 简写星期几,如SunEEEE: 全写星期几,如Sundayaa: 上下午,AM/PMH: 时,24小时制,0-23HH: 时,24小时制,带前置0h: 时,12小时制,无前置0hh: 时,12小时制,带前置0m: 分,1-2位mm: 分,2位,带前置0s: 秒,1-2位ss: 秒,2位,带前置0S: 毫秒Z: GMT(时区)
注:hh 和 HH是有区别的,hh是12小时制,HH是24小时制,
13:00:01 如果用 hh:mm:ss是解析不出来的,必须是 HH:mm : ss
语系/地区码
zh_cn 简体中文 zh_tw 繁体中文 da_dk 丹麦语 nl_nl 荷兰语 en_us 英语 fi_fi 芬兰语 fr_fr 法语 de_de 德语 it_it 意大利语ja_jp 日语 ko_kr 朝鲜语 nb_no 挪威语 pt_br 葡萄牙语 es_es 西班牙语 es_us 西班牙语(美国) sv_se 瑞典语
日期格式化用到的类 NSDateFormatter,作用是将日期转换成指定格式的字符串或特定格式的字符串转换成日期;
1、日期->字符串
NSDateFormatter *format = [[NSDateFormatter alloc] init];[format setDateFormat:@"yyyy-MM-dd hh:mm:ss"];NSString *str = [format stringFromDate:date];输出结果:2017-03-08 01:03:31
2、字符串->日期
NSString *strDate = @"2017-03-08 01:03:31";NSDateFormatter *format = [[NSDateFormatter alloc] init];[format setDateFormat:@"yyyy-MM-dd hh:mm:ss"];NSDate *date = [format dateFromString:strDate];
3、Tue Mar 07 16:21:32 +0800 2017 -> 日期
注:Tue Mar 07 16:21:32 +0800 2017 是美国时间的格式,转换的时候需要设置地区编码"en_US",如果设置为"zh_cn",是无法解析的;
NSString *strDate = @"Tue Mar 07 16:21:32 +0800 2017";NSDateFormatter *formatter = [[NSDateFormatter alloc] init];formatter.dateFormat = @"EEE MMM dd HH:mm:ss ZZZ yyyy";formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];NSDate *date = [formatter dateFromString:strDate]; 输出:2017-03-07 08:21:32 +0000 formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_cn"];输出:null
4、日期->Tue Mar 07 16:21:32 +0800 2017
NSDate *currentDate = [NSDate date];NSDateFormatter *formatter = [[NSDateFormatter alloc] init];formatter.dateFormat = @"EEE MMM dd HH:mm:ss ZZZ yyyy";formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];NSLog(@"%@", [formatter stringFromDate:currentDate]);输出:Wed Mar 08 10:11:09 +0800 2017formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_cn"];输出:周三 3月 08 10:17:21 +0800 2017
5、时间戳 : 从1970年1月1号 00:00:00开始走过的毫秒数
NSString *strTime = @"1745645645645";NSTimeInterval time = strTime.longLongValue / 1000.0;NSDate *date = [NSDate dateWithTimeIntervalSince1970:time];NSLog(@"%@", date);输出:2025-04-26 05:34:05 +0000
6、NSCalendar:获取年、月、日、时、分、秒
注:NSCalendar的初始化方法 [NSCalendar currentCalendar] 在高版本系统上有可能会崩溃,使用之前最好做版本判断
NSCalendar *calendar; if([UIDevice currentDevice].systemVersion.doubleValue >= 8.0){ calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];}else{ calendar = [NSCalendar currentCalendar];}或者if([calendar respondsToSelector:@selector(calendarWithIdentifier:)]){ calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]; }else{ calendar = [NSCalendar currentCalendar]; }
NSDate *date = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar];NSInteger year = [calendar component:NSCalendarUnitYear fromDate:date];NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date]; NSLog(@"%zd %zd %zd", year, month, day);输出:2017 3 8
NSDate *date = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar];NSDateComponents * comp =[calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date]; NSLog(@"%zd %zd %zd", comp.year, comp.month, comp.day);输出: 2017 3 8