は私がNSGregorianCalendar
識別子とNSCalendar
を使用して、dateFromComponents
でNSDate
を作成し、ここで奇妙な部分です: それは1900年12月31日NSDateComponentsからNSDateを作成しましたか?
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
ご覧のとおり、1日に5分のギャップがあります。 しかし、私が[NSTimeZone timeZoneForSecondsFromGMT:]
でtimeZoneを設定すると、同じ秒数の偏差 - 28800であっても、それは正常です。 これは何の原因ですか?
タイムゾーンをアジア/上海に設定すると、同じ結果が得られます。ナイスキャッチ。 – Desdenova