В iOS нарушено летнее время в NSTimeZone? - PullRequest
3 голосов
/ 16 апреля 2011

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

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 ]

1 голос
/ 06 мая 2014

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

1 голос
/ 16 апреля 2011

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

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

...