我们最开始获取系统当前时间,如下,这种方式存在一个问题,当iPhone关闭了24小时制时,获取的时间格式是:iPhone11上:20230822下午210568760
;iPhone7 plus上:2023082240043851 PM
;而我们预期的时间格式是:20230822172433548
之前获取时间格式
- (NSString*) getTime_bak{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMddHHmmssSSS"];
NSString *current = [formatter stringFromDate:[NSDate date]];
return current;
}
修正后获取时间
-(NSString*)getTime{
@try {
//当前时间对象[dateNow]
NSDate *dateNow = [NSDate date];
/*
日历类[calendar]
注意: 一定要用[NSCalendar currentCalendar]初始化,
如果用[[NSCalendar alloc] init]初始化, 获取的时间会是随机式.
*/
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger year; //年
NSInteger month; //月
NSInteger day; //日
NSInteger hour; //时
NSInteger minute; //分
NSInteger second; //秒
NSInteger nanosecond; //10^-9秒
/*
使用[calendar]对象从[dateNow]中获取 [hour] [minute] [second] [nanosecond]
注意: '&'是取地址符, 把变量的"地址"传过去,
函数会把相应的值写入这个"地址", 我们的变量里面就存入相应的值了.
*/
[calendar getHour:&hour minute:&minute second:&second nanosecond:&nanosecond fromDate:dateNow];
/*
使用[calendar]对象从[dateNow]中获取[year],[month],[day].
注意: [Era]是公元的意思, 现在的日期都会为1.
由于没有文档介绍这个值的含义, 使用的需求度也不高, 暂时先不研究这个.
*/
[calendar getEra:nil year:&year month:&month day:&day fromDate:dateNow];
/*
打印获取的值
注意: '%d'是32位整数.
'%ld'是64位整数.
'%2ld'是64位整数, 如果不足2位则在左边补充空格.
'%02ld'是64位整数, 如果不足2位则在左边补充'0'.
输出结果: 2015-03-26 13:44:34.582 MyCake[3020:106505] 2015-03-26 13:44:34.582
结果说明: 对比一下, 系统输出的时间, 和你的时间是不是一样的.
而且毫米数字都一样, 说明这种写法效率非常高.
*/
//NSLog(@"%04ld-%02ld-%02ld %02ld:%02ld:%02ld.%03ld", year, month, day, hour, minute, second, nanosecond/1000000);
NSString *timeStr = [NSString stringWithFormat:@"%04ld%02ld%02ld%02ld%02ld%02ld%03ld", year, month, day, hour, minute, second, nanosecond/1000000];
//无论是否关闭了24小时制都返回这个格式:20230822172433548
NSLog(@"%@", timeStr);
return timeStr;
} @catch (NSException *exception) {
NSLog(@"%@", [exception reason]);
}
return @"";
}