保持NSDateFormatter的原始时区

4

我有像2011-01-19T20:30:00-5:00这样的字符串,我想将它们解析为NSDate,但我想保留原始时区。

NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat: @"yyyy-MM-dd'T'HH:mm:ssZ"];
NSLog(@"%@", [dateFormatter dateFromString: dateString]);
[dateFormatter release];

这段代码给我返回了2011-01-20 02:30:00 +0100,虽然是正确的,但我希望在NSDate中保留原始时区-0500而不是我的本地时区+0100。

1个回答

2
首先,您应该知道NSDate对象不存储任何与其区域设置或时区相关的内容,在内部它们基本上表示为自2001年1月1日GMT以来的秒数。
如果您能够在NSTimezone对象中找到字符串的时区,请在执行dateFromString之前执行以下操作:
[dateFormatter setTimeZone:timezoneForString];

并且你就设置好了。

如果你无法获取NSTimezone,只有一个字符串“2011-01-19T20:30:00-5:00”,那么从-5:00得到NSTimezone的方法不是很好,因为没有一种明确的方法可以从UTC偏移量获取时区ID(例如“America/Los_Angeles”)或时区名称(例如“Pacific Daylight Time”)。因此,你需要编写自己的代码手动提取偏移量,存储它,并在显示之前将其添加到时间中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接