Сохранить оригинальный часовой пояс с NSDateFormatter - PullRequest
4 голосов
/ 11 января 2011

У меня есть строки вроде 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 Ответ

2 голосов
/ 31 октября 2011

Прежде всего, вы должны знать, что объекты 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.Поэтому вам придется написать собственный код, чтобы вручную извлечь смещение, сохранить его и добавить к времени до его отображения.

...