如何禁止NSDate进行自动时区转换

时间:2012-11-22 06:30:44

标签: objective-c ios macos nsdateformatter

我的Web服务在JSON响应中返回以下日期字符串。此日期字符串已经是UTC。

{“last_updated_at”:“2012-11-19 07:55:30”}

我使用NSDateFormatter解析响应日期字符串,如下所示。

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

if ([ticketFields objectForKey:@"last_updated_at"] != [NSNull null]) {
    self.lastUpdatedAt = [dateFormatter dateFromString:[ticketFields objectForKey:@"last_updated_at"]];

    NSLog(@"Time Response string %@", [ticketFields objectForKey:@"last_updated_at"]);
    NSLog(@"Formatted NSDate %@", self.lastUpdatedAt);
}

这是我的日志输出

Time Response string 2012-11-21 11:38:44
Formatted NSDate 2012-11-21 06:08:44 +0000

如您所见,NSDateFormatter除了解析日期字符串外,还认为日期字符串是UTC + 530(我的本地时区),并通过从给定日期减去530小时自动将其转换为UTC。我不希望这种情况发生。 NSDateFormatter应该从给定的字符串转换日期,理想情况下给出以下输出。

Time Response string 2012-11-21 11:38:44
Formatted NSDate 2012-11-21 11:38:44 +0000

1 个答案:

答案 0 :(得分:3)

此数据格式配置阻止了转换,并将日期响应字符串视为UTC日期。

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

它有效。