4

我正在尝试从我的NSDate对象中删除小时和分钟

keyDate = [[array objectAtIndex:i] date];
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar* calendar = [NSCalendar currentCalendar];

NSDateComponents* components = [calendar components:flags fromDate:keyDate];
keyDate = [[calendar dateFromComponents:components] dateByAddingTimeInterval:[[NSTimeZone localTimeZone]secondsFromGMT]];

它工作正常,直到 2013 年 4 月,之后我的NSDate对象以 -1 小时班次创建。我很确定这是因为夏令时。

如何使我的NSDate对象全年为 00:00:00 +0000 ?

4

1 回答 1

6

NSDate对象本质上存储为 GMT 值。您在这里遇到的问题是您正在使用 currentCalendar(目前可能在 DST 中)和 localTimeZone secondsFromGMT 进行计算,这取决于一年中的时间。

这里最好的解决方案是使用 GMT 的 NSCalendar,而不是基于时区变化,如果(如您所指出的)您希望它们始终为 +0000。

或者,您可以更改为使用NSTimeZone's secondsFromGMTForDate:,它考虑了相关日期/时间的 DST。

于 2012-10-31T10:51:51.540 回答