我在我的應用程序中使用CET
作爲我的默認timezone
。在德國Daylight
保存時間將從開始2015年3月29日。現在我正在做一些測試,看看我的日期是否將在未來正確轉換。我用下面的代碼來測試它。帶日光節約時間的NSDateFormatter不正確的時間字符串
NSTimeZone *timeZone = [NSTimeZone timeZoneWithAbbreviation:@"CET"];
[NSTimeZone setDefaultTimeZone:timeZone];
NSDate *now = [NSDate date]; // 10 Feb, 2015
NSDate *dateAfter29March = [now dateByAddingMonths:2]; // 10 April, 2015
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
[formatter setTimeZone:timeZone];
NSLog(@" NOW DATE -> %@",[formatter stringFromDate:now]);
NSLog(@" DATE AFTER 29 March -> %@",[formatter stringFromDate:dateAfter29March]);
類別方法添加個月
- (NSDate *)dateByAddingMonths:(NSInteger) dMonths {
NSDateComponents *components = [[NSDateComponents alloc] init];
components.month = dMonths;
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar dateByAddingComponents:components toDate:self options:0];
}
控制檯輸出如下:
NOW DATE -> 2015-02-10 18:28:05 +0100
DATE AFTER 29 March -> 2015-04-10 18:28:05 +0200
凡我對日期預期時間後,3月29日17:28爲: 05如現在的一小時,減去白天的時間。我究竟做錯了什麼?
PS:我也嘗試設置標籤中的輸出字符串,並沒有發生變化。
顯示'dateByAddingMonths:'的代碼。 – rmaddy 2015-02-10 17:44:37
是的,問題是你的方法'dateByAddingMonths:'。我在操場上試過'var dateAfter29March = now.dateByAddingTimeInterval(2 * 30 * 24 * 60 * 60)',它工作正常(顯示:''Apr 11,2015,7:49 PM'',where now ='Feb 10 ,2015年,下午6點53分「')。 – Q8i 2015-02-10 17:50:55
我已經更新了我的代碼。 – 2015-02-10 17:53:57