Значения и локаль NSTimeZone

У меня есть часовой пояс: среднеевропейское летнее время в OS X (автоматически в зависимости от местоположения). При запуске моего кода на симуляторе я получаю следующие результаты:

NSTimeZone *tz = [NSTimeZone localTimeZone]; // Gives me Local Time Zone (Europe/Warsaw (CEST) offset 7200 (Daylight))

NSString *tzString = [tz localizedName:NSTimeZoneNameStyleShortStandard
                                locale:[NSLocale currentLocale]]; // Gives me CET

То же самое с EDT / EST - когда я устанавливаю текущее время как EDT в System -> Preferences, соответствующие методы возвращают EST.

Я что-то пропустил?


person rafek    schedule 09.09.2013    source источник


Ответы (2)


Standard в NSTimeZoneNameStyleShortStandard конкретно означает имя часового пояса без перехода на летнее время.

Если вы хотите использовать имя летнего времени или не зависеть от статуса летнего времени на какую-то дату, вам, вероятно, придется использовать -isDaylightSavingTimeForDate:, чтобы выбрать NSTimeZoneNameStyleShortStandard против NSTimeZoneNameStyleShortDaylightSaving.

person Greg Parker    schedule 09.09.2013

Apple предупреждает об использовании сокращений часовых поясов. Лучше использовать известное смещение для вычисления с помощью +timeZoneForSecondsFromGMT:

Используйте свойство -daylightSavingTime, чтобы проверить состояние перехода на летнее время.

person Karsten    schedule 23.02.2015