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

NSDateFormatter stringFromDate: returning local time instead of UTC / GMT

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

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,这与我本地时区 (CEST) 中的日期相同。

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

我找到的所有来源都表明这应该有效。我的错误在哪里?

此代码应该有效:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
[formatter setTimeZone:timeZone];

NSDate *now = [NSDate date];
NSString *dateAsString = [formatter stringFromDate:now];

我在你的代码中看到的唯一奇怪的事情是你在设置 NSTimeZone.

时使用 dateFormatter 而不是 dateTimeFormatter