【发布时间】:2015-02-10 17:35:58
【问题描述】:
我在我的应用程序中使用CET 作为我的默认timezone。在德国 Daylight 节省时间将从 2015 年 3 月 29 日开始。现在我正在做一些测试,看看我的日期是否会在将来正确转换。我使用以下代码对其进行了测试。
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:的代码。 -
是的,问题是你的方法
dateByAddingMonths:。我在操场上试过var dateAfter29March = now.dateByAddingTimeInterval(2*30*24*60*60),效果很好(显示:"Apr 11, 2015, 7:49 PM",现在=Feb 10, 2015, 6:53 PM")。 -
我已经更新了我的代码。
-
@Q80 永远不要使用这样的代码添加时间间隔。
-
@AbidHussain 添加一些 NSLog 语句来记录
now和dateAfter29March除了记录相应的字符串。
标签: ios objective-c swift nsdate nsdateformatter