В 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
секунд.