我试图对日程安排应用程序执行日期计算,但遇到夏令时问题。我试图确定与两个日期之间的天数:无夏时制时间的日期计算
NSDateComponents *activityComponents = [[NSDateComponents alloc]init];
activityComponents = [self.calendar components:NSDayCalendarUnit
fromDate:self.viewBeginDate
toDate:item.ES
options:0];
NSLog(@"Days: %d and hours: %d", [activityComponents day], [activityComponents hour]);
其中self.viewBeginDate
和item.ES
都是NSDate的对象和self.calendar
是公历。
- 2013年11月1日和2013年11月1日之间的计算的情况下,它提供了0。
- 2013年11月1日和2013年11月2日之间计算的情况下,它提供了1.
- 十一月间计算当2013年11月3日和2013年11月3日,它提供了2.
- 在2013年11月1日至2013年11月4日期间计算时,它再次提供2 !
这里是我的输出:
Days: 0 and hours: 0
Days: 1 and hours: 0
Days: 2 and hours: 0
Days: 2 and hours: 24
Days: 3 and hours: 23
我希望能够确定2个NSDate
对象之间的天数,而不通过夏令时的影响,因为我的应用程序不关心本地或用户所在的时区。我只想告诉我,2013年11月1日至2013年11月4日之间有3天。有什么想法?
我的NSDate
对象是使用以下格式的字符串创建的:2013-11-01 00:00:00 +0000。每个日期的时间设置为00:00:00,GMT偏移量为+0000。
我想到了两个可能的选择:
- 使用
isDaylightSavingTime
检查每个日期并创建一个新的(修改)日期1个小时的偏差,如果它的日期是夏令时。我很担心增加的计算时间,因为我的应用程序计算给定开始日期和其他日期数组之间的日期。这个数组最多可以有2000个日期。我不确定这是否是合法的问题... - 创建不受DST影响的自定义时区。这甚至有可能吗?
只需将您的NSCalendar设置为UTC即可。 –
我已将日历更改为UTC,结果没有任何差异。我做对了吗? '[自我。日历setTimeZone:[NSTimeZone timeZoneWithName:@ “UTC”];' – dfro
我列出了用'的NSLog的时区(@ “%@”,[NSTimeZone knownTimeZoneNames]);',并获得在喜欢一个长长的清单“美国/诸如此类“和”欧洲/诸如此类“甚至格林尼治标准时间,但我没有看到UTC。它不总是可用吗? – dfro