Objective-C - NSTimeZone 2个小时错了吗?

时间:2011-07-22 22:22:14

标签: objective-c nstimezone

我正在使用以下代码将我的时区设置为欧洲斯德哥尔摩。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Stockholm"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];

NSDate *webUpdateDate = [dateFormatter dateFromString:@"2011-07-22 22:10"]; 
// Outputs "2011-07-22 20:10 +0000"

任何人都知道为什么?

1 个答案:

答案 0 :(得分:3)

我假设您正在使用NSLog检查日期。 NSDate对象代表一个绝对时间 - 它没有时区概念,因此当它被要求提供description时,它显示为好像是GMT中的时间。如果您想要为斯德哥尔摩时区表示的绝对时间,则需要再次使用日期格式化程序:

NSLog(@"%@", [dateFormatter stringFromDate:webUpdateDate]);

由于日期最初是通过格式化程序创建的,格式化程序已将其时区设置为斯德哥尔摩,因此我相信这将为您提供与输入时使用的字符串相同的字符串:@"2011-07-22 22:10"