J'ai créé un NSDate
par dateFromComponents
, en utilisant NSCalendar
avec identifiant NSGregorianCalendar
, voici la partie étrange: La date incorrecte se si elle est avant un certain moment avant 1900/12/31NSDate créé à partir de NSDateComponents est-il incorrect?
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);
Le journal sera :
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
Comme vous pouvez le voir, il y a un écart de 5 minutes pendant la journée. Cependant, si je règle le timeZone par [NSTimeZone timeZoneForSecondsFromGMT:]
, même avec le même écart de secondes - 28800, ce sera normal. Quelle est la cause de ceci?
J'obtiens le même résultat exact si je définis le fuseau horaire en Asie/Shanghai. Belle prise. – Desdenova