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

And*_*ord 4 datetime date nsdate nsdateformatter ios

在我的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];
Run Code Online (Sandbox Code Playgroud)

当我设置断点并检查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.

我找到的所有来源都说明了这一点.我的错误在哪里?

Mas*_*eni 7

这段代码应该有效:

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];
Run Code Online (Sandbox Code Playgroud)

我在你的代码中看到的唯一奇怪的事情是你使用dateFormatter而不是dateTimeFormatter设置时NSTimeZone.