我有约会。
NSLog
将其显示为:
2014-05-11 21:59:59 +0000
现在我希望获得相同的日期,但小时,分钟和秒设置为零:
2014-05-11 00:00:00 +0000
我的代码:
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:dayOfWeek];
NSLog(@"components: %@", components);
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:[components year]];
[comps setMonth:[components month]];
[comps setDay:[components day]];
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
NSLog(@"New date: %@", [calendar dateFromComponents:comps]);
但NSLog
显示:
2014-05-10 22:00:00 +0000
似乎日期和小时计算错误。
请注意,我在德国,但我使用[NSTimeZone localTimeZone]
,因为我认为这应该返回正确的时区?
答案 0 :(得分:6)
真的没有问题......还是:
NSDate始终为UTC。当您致电NSLog时,它会显示在夏令时间关闭时伦敦的时间。因此,您的初始NSDate在伦敦晚上10点之前是一秒钟,夏令时关闭(UTC),午夜前一秒钟。然后,您计算一个刚刚在德国开始的NSDate。在那个时间点,它是在UTC的前一天晚上10点,这是NSLog显示的内容。