Я создал NSDate
по dateFromComponents
, используя NSCalendar
с NSGregorianCalendar
идентификатором, вот что странно: дата получения некорректной, если это до определенного момента времени до 1900/12/31NSDate создан с NSDateComponents некорректно?
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, это будет нормально. В чем причина этого?
Я получаю тот же точный результат, если я установил часовой пояс в Asia/Shanghai. Хорошо поймал. – Desdenova