使用NSDateFormatter保留原始时区

时间:2011-01-11 17:34:03

标签: objective-c timezone nsdate nsdateformatter rfc3339

我有像 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 ,这也是正确的但我希望保留原始时区-0500而不是我当地的时区+0100 in NSDate。

1 个答案:

答案 0 :(得分:2)

首先,您应该知道NSDate对象不存储与其区域设置或时区相关的任何内容,并且在内部它们基本上表示为自2001年1月1日GMT以来的第一个瞬间。 / p>

如果能够为NSTimezone对象中的字符串设置时区,请在执行dateFromString之前执行以下操作:

[dateFormatter setTimeZone:timezoneForString];

你将被设定。

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