在我的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
。
我发现所有来源都说明了这一点。我的错误在哪里?
答案 0 :(得分:7)
此代码应该有效:
dateFormatter
我在您的代码中看到的唯一奇怪的事情是,在设置dateTimeFormatter
时,您使用NSTimeZone
代替{{1}}。