老项目获取日期的方法如下
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMddHHmmss"];
NSDate *datenow = [NSDate date];
NSString *currentTimeString = [formatter stringFromDate:datenow];
当用户手机设置为24小时制的时候,获取的currentTimeString为"20221206145315",但是手机设置为12小时制的时候获取到的currentTimeString就是"20221206下午25415"了,导致后续拼接参数请求接口的时候出现校验不通过的情况。
原因:
手机系统升级到iOS 15.4之后,用户手动修改日历、修改12/24小时制都会导致Dateformatter输出不同的结果。
从苹果官方对NSDateFormatter的解释中可以看出,要想在任何时候输出固定格式的日期,需要设置.local,即设置:
formatter.locale=[[NSLocale alloc]initWithLocaleIdentifier:@"zh_Hans_CN"];
同时还需设置dateFormatter的日历格式,设置为公历纪年法:
formatter.calendar=[[NSCalendar alloc]initWithCalendarIdentifier: NSCalendarIdentifierGregorian];