В iOS нарушено летнее время в NSTimeZone?

У меня есть две переменные:

NSTimeZone *timeZoneMinus5 = [NSTimeZone timeZoneForSecondsFromGMT: -18000];
NSTimeZone *timeZoneEST = [NSTimeZone timeZoneWithName:@"EST"];

Протестировано на устройстве и на симуляторе, а также оба возврата GMT-05:00,

Пока я пишу это время 2:55 am (GMT), Я нахожусь в часовом поясе EST, поэтому мое время 10:55pm (GMT-05:00), соблюдая переход на летнее время 15 апреля 2011 года.

Тем не мение, [timeZoneEST isDaylightSavingTime] возвращается NO а также [timeZoneEST daylightSavingTimeOffset] возвращается 0,

Если я использую timeZoneEST чтобы получить текущее время в виде строки:

NSDate *gmtTime = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"h:mm a (z)"];
[dateFormatter setTimeZone: timeZoneEST];
NSString *timeStr = [dateFormatter stringFromDate: gmtTime];

и симулятор и устройство дает мне 9:55 PM (GMT-05:00),

В моем понимании я должен получить 10:55 PM (GMT-05:00), Я ошибаюсь или я делаю это неправильно?

2 ответа

Решение

Вы очень смущены. Для начала, летнее время в восточном часовом поясе США составляет -4, а не -5. 9:55 вечера, безусловно, за 5 часов до 2:55; 10:55 вечера будет за 4 часа до.

Скорее всего, "EST" дает вам именно это: восточное стандартное время без учета летнего времени. "EST5EDT" может дать вам часовой пояс, который вы ожидаете, хотя (при условии, что устройство использует zoneinfo, как это делает симулятор), "America/New_York" предпочтительнее.

Вы определяете свой NSTimeZone быть EST, поэтому имеет смысл, что [timeZoneEST isDaylightSavingTime] возвращается NO, Вместо этого используйте [[NSTimeZone localTimeZone] daylightSavingTimeOffset]; получить смещение летнего времени по местному времени. Должно вернуться 3600 секунд.

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