【发布时间】:2016-05-25 07:05:55
【问题描述】:
我通过dateFromComponents 创建了一个NSDate,使用NSCalendar 和NSGregorianCalendar 标识符,这是奇怪的部分:
如果日期早于 1900/12/31 之前的某个时间点,则日期会不正确
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = 1900; components.month = 12; components.day = 31;
NSDate *date = [calendar dateFromComponents:components];
components.year = 1901; components.month = 1; components.day = 1;
NSDate *date2 = [calendar dateFromComponents:components];
NSLog(@"%@",calendar.timeZone.description);
NSLog(@"%@",date);
NSLog(@"%@",date2);
日志将是:
2016-05-25 14:58:21.014 date[79754:2192157] Asia/Shanghai (GMT+8) offset 28800
2016-05-25 14:58:21.015 date[79754:2192157] 1900-12-30 15:54:17 +0000
2016-05-25 14:58:21.015 date[79754:2192157] 1900-12-31 16:00:00 +0000
如您所见,白天有 5 分钟的间隔。
但是,如果我将 timeZone 设置为[NSTimeZone timeZoneForSecondsFromGMT:],即使秒偏差相同 - 28800,也将是正常的。
这是什么原因?
【问题讨论】:
标签: ios nsdate nscalendar nsdatecomponents