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。

4

1 回答 1

2

首先,您应该知道 NSDate 对象不存储与其语言环境或时区相关的任何内容,并且在内部,它们基本上表示为自 2001 年 1 月 1 日格林威治标准时间以来的秒数。

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

[dateFormatter setTimeZone:timezoneForString];

你会被设置的。

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

于 2011-10-30T20:55:14.823 回答