NSDateFormatter stringFromDate:返回本地时间而不是UTC / GMT

时间:2015-08-25 15:20:26

标签: ios date datetime nsdate nsdateformatter

在我的iOS应用程序中我有一个NSDate对象,应该转换为NSString,以UTC / GMT显示日期和时间:

NSDateFormatter * dateTimeFormatter = [[NSDateFormatter alloc] init];
[dateTimeFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
// OR  [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
// OR  [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
// OR  [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
// OR  [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
// OR  not specify the TimeZone at all...

NSString *result = [dateTimeFormatter stringFromDate:date];

当我设置断点并检查date时,它会正确显示为__NSDate * 2015-08-25 14:03:57 UTC。但是,结果字符串是2015-08-25 16:03:57,这与我本地TimeZone(CEST)中的日期相同。

无论我尝试以UTC / GMT格式2015-08-25 14:03:57获取字符串的哪种解决方案,我总是获得本地版本2015-08-25 16:03:57

我发现所有来源都说明了这一点。我的错误在哪里?

1 个答案:

答案 0 :(得分:7)

此代码应该有效:

dateFormatter

我在您的代码中看到的唯一奇怪的事情是,在设置dateTimeFormatter时,您使用NSTimeZone代替{{1}}。