Сохранить оригинальный часовой пояс с 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, что также правильно, но я хочу сохранить исходный часовой пояс -0500 вместо моего местного часового пояса +0100 в NSDate.

1 ответ

Прежде всего, вы должны знать, что объекты NSDate не хранят ничего, связанного с их локалями или часовыми поясами, и внутренне они по существу представлены в виде количества секунд с первого момента времени 1 января 2001 года по Гринвичу.

Если вы можете использовать часовой пояс для строки в объекте NSTimezone, просто сделайте следующее, прежде чем делать dateFromString:

[dateFormatter setTimeZone:timezoneForString];

и вы будете установлены.

Если вы не можете получить NSTimezone и все, что у вас есть, это строка "2011-01-19T20:30:00-5:00", то не очень хороший способ попасть в NSTimezone из -5:00, поскольку не всегда существует однозначный способ получить идентификатор часового пояса (например, "America/Los_Angeles") или имя часового пояса (например, "Pacific Daylight Time") из смещения UTC. Таким образом, вам придется написать свой собственный код, чтобы вручную извлечь смещение, сохранить его и добавить к времени до его отображения.

Другие вопросы по тегам