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
在我的 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