objective-c – 使用NSDateFormatter保留原始时区

我有像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.

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

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

[dateFormatter setTimeZone:timezoneForString];

你会被设定的.

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

点赞