我正在创建一个NSDate。为什么这一天总是少一点?
这是代码:
NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:today];
[comps setDay:31];
NSDate *lastDayOfMonth = [gregorian dateFromComponents:comps];
NSLog(@"last %@",lastDayOfMonth);
这是日志:
last 2013-12-30 23:00:00 +0000
结果是30而不是31
答案 0 :(得分:1)
简而言之,对我来说,这似乎是一个时区或夏令时。
所有这些日历时间计算都可能非常混乱,因此这是一个一般性建议:观看WWDC 2012和WWDC 2013关于日历计算(尤其是2012版本)。
答案 1 :(得分:1)
last 2013-12-30 23:00:00 +0000
这是因为你正在显示时间作为GMT - 也就是伦敦的时间。但你不在伦敦。我不知道你在哪里,但是如果你想到这一点,你就会意识到,当它在伦敦30日2300时,就在你所在的31日午夜,这正是你所要求的。