NSDateFormatter выключен на один час - PullRequest
5 голосов
/ 27 февраля 2012

Я пытаюсь отформатировать дату из ленты RSS:

Пн, 27 февраля 2012 10:33:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ (формат из ленты RSS)

Кому:

Пн, 27 февраля 2012 10:33 *

Вот что я делаю в коде:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EE, d MM yyyy HH:mm:ss zzz"];  

NSDate *date = [dateFormat dateFromString:@"Mon, 27 Feb 2012 10:33:00 EDT"];

[dateFormat setDateFormat:@"EE, d MMM yyyy hh:mm a"];

formatedDateLabel.text = [dateFormat stringFromDate:date];

[dateFormat release];

Однакоэто всегда выдает:

Пн, 27 февраля 2012 9:33 AM

Обратите внимание, что мои устройства настроены на EST.Я попытался настроить форматировщик даты, чтобы он соответствовал EDT, но это, похоже, не имеет никакого значения.

Есть идеи, что я делаю не так?

1 Ответ

2 голосов
/ 27 февраля 2012

Вы не делаете ничего плохого.Причина, по которой это происходит, заключается в том, что NSTimezone внутреннее представление EDT и EST одинаково:

// These objects are the same:
[NSTimeZone timeZoneWithAbbreviation:@"EST"];
[NSTimeZone timeZoneWithAbbreviation:@"EDT"];

NSDateFormatter dateFromString: достаточно умен, чтобы знать, что дата с пометкой EDT в феврале должна иметь смещение GMT-4 вместо -5, хотя это не совсем правильная дата.Но когда вы используете его для отображения дат, если его часовой пояс установлен на EST или EDT (который он рассматривает как одно и то же), он будет использовать соответствующий часовой пояс в зависимости от того, действует ли летнее время навремя.

...