NSDate / NSDateFormatter在iPhone iOS 4.3上返回GMT

时间:2011-08-26 03:44:34

标签: iphone nsdate

为什么这段代码会给我GMT? (我在美国山区时间)

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init]  autorelease];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
[dateFormatter setLocale:[NSLocale currentLocale]];     

NSDate *now = [NSDate date];
NSString *storeTime = [dateFormatter stringFromDate:now];

2 个答案:

答案 0 :(得分:3)

NSDate表示具体的时间点,,与时区无关。换句话说,NSDate没有时区。只有当您想要向用户显示日期时,时区才有意义。所以在山区时间晚上9:30 格林尼治标准时间凌晨3:30(+1天)(假设时差为6小时)。

NSDate,因为它没有时区,所以在生成人类可读版本时必须选择一个作为其-description返回。为简单起见,它始终返回以GMT时区格式化的日期。如果您希望格式化的日期位于不同的时区,则可以设置-timezone的{​​{1}}属性,然后使用NSDateFormatter方法将日期转换为字符串。< / p>

答案 1 :(得分:0)

是的,事实证明这是Apple在Mac上的号码中的一个错误。数字不是解释日期字符串,而是添加时间偏移量。格式化后,NSDate字符串一直都是正确的。