iOS 日期转换解析(二)-YYYY与yyyy区别
2020-02-06 本文已影响0人
FieryDragon
2019年末最后几天突然收到用户反馈日期年份变成了2020,经沟通发现用户也未手动修改设备时间,而这部分的代码是很久以前的代码最近也没有改动,一时间感到莫名其妙。
查看NSDate数据展示的是2019年且时间也准确,但是转换成字符串却成了2020年时间。后经同事提醒说转换时使用"YYYY"格式的转换后数据是正常的,经测试发现确如同事所说修改后时间正常展示。
示例:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
NSDate *datenow = [NSDate date];
NSString *currentTimeString = [formatter stringFromDate:datenow];
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"YYYY-MM-dd"];
[formatter2 setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
NSString *currentTimeString2 = [formatter2 stringFromDate:datenow];
NSLog(@"yyyy-currentTimeString:%@",currentTimeString);
NSLog(@"YYYY-currentTimeString:%@",currentTimeString2);
2019-12-31 10:03:00.807213+0800 Test[1827:14738] yyyy-currentTimeString:2019-12-31
2019-12-31 10:03:00.807415+0800 Test[1827:14738] YYYY-currentTimeString:2020-12-31
原因:
YYYY 是以周为单位计算的,当天所在周属于的年份,我们平常计算日期时最好用yyyy,yyyy才是当天所在的年份。
如果一月1日是星期一,星期二,星期三,星期四,它是新的一年的第一周。如果一月1日是星期五,星期六或星期日,它是前一年的52周或53周。
PS:据说19年末好多公司都遇到了这个问题,程序员们紧急修改上线,都上新闻了😂。
- 参考资料
iOS 系统时间格式区别