在iPhone iOS 4.3上返回GMT的NSDate/NSDateFormatter

在iPhone iOS 4.3上返回GMT的NSDate/NSDateFormatter,iphone,nsdate,Iphone,Nsdate,为什么这个代码会给我GMT?(我在美国山区时间) NSDate表示具体的时间点,与时区无关。换句话说,NSDate没有时区。时区仅在希望向用户显示日期时才相关。因此,山区时间的晚上9:30是格林尼治标准时间的凌晨3:30(+1天)(假设时差为6小时) NSDate,因为它没有时区,所以在生成可读版本时必须选择一个时区作为其-说明返回。为了简单起见,它总是返回以GMT时区格式化的日期。如果您希望将日期格式化为不同的时区,您可以设置NSDateFormatter的-timezone属性,然后使用-s

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


NSDate
表示具体的时间点,与时区无关。换句话说,
NSDate
没有时区。时区仅在希望向用户显示日期时才相关。因此,山区时间的晚上9:30是格林尼治标准时间的凌晨3:30(+1天)(假设时差为6小时)


NSDate
,因为它没有时区,所以在生成可读版本时必须选择一个时区作为其
-说明返回。为了简单起见,它总是返回以GMT时区格式化的日期。如果您希望将日期格式化为不同的时区,您可以设置
NSDateFormatter
-timezone
属性,然后使用
-stringFromDate:
方法将日期转换为字符串。

是的,这是苹果在Mac上的数字错误。数字不是解释日期字符串,而是添加时间偏移量。格式化后的NSDate字符串一直都是正确的。

您能写出您得到的完整日期吗?请尝试
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]]
好吧,现在正好是未来的6小时,所以是GMT而不是我的本地山区时间。例如,昨晚9:30,我尝试了[dateFormatter setTimeZone:[NSTimeZone localTimeZone];但我得到了同样的结果——格林尼治标准时间不是山地时间。哇,这实际上是一个数字错误!导入时的数字将我的字符串从2011年8月26日MDT下午2:20:05更改为2011年8月26日晚上8:20。所以它决定用格林尼治标准时间告诉我日期!所以这不是一个NSDateFormatter错误。感谢那些回答的人。
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];