我試圖對日程安排應用程序執行日期計算,但遇到夏令時問題。我試圖確定與兩個日期之間的天數:無夏時制時間的日期計算
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