Получение сокращений часовых поясов в Swift

Я пытаюсь получить сокращения часового пояса местного часового пояса, используя следующий код.

private func getLocalTimezone() -> String {
   guard let localTimezone =  TimeZone.current.abbreviation() else {
     return ""
   }
   return localTimezone
 } 

Но когда я нахожусь в индийском часовом поясе, я всегда получаю GMT+5:30 там, где мне это нужно, как IST. Это происходит правильно, когда я нахожусь в CST или PST. Может ли кто-нибудь предложить способ достижения решения этой проблемы. Заранее большое спасибо


person Sree    schedule 09.02.2021    source источник


Ответы (1)


Это связано с тем, что сокращения часовых поясов зависят от региональных настроек. IST означает только стандартное время Индии (Asia/Kolkata) в Индии. В других частях мира это может означать израильское стандартное время или ирландское стандартное/летнее время. Вот сайт со списком сокращений. Вы сами видите, насколько неоднозначными они могут быть.

Вот почему abbreviation() учитывает регион вашего телефона, то есть этот параметр:

введите здесь описание изображения

abbreviation() предоставляет IST, если регион вашего устройства — Индия. Если ваш телефон находится где-то еще, он показывает GMT+5:30, потому что это самый безопасный и недвусмысленный вариант.

Если вы хотите, чтобы он выводил IST независимо от того, где находится ваше устройство, вам нужно жестко запрограммировать это, создав словарь идентификаторов часовых поясов для нужных вам сокращений. Есть встроенный abbreviationDictionary, который идет по другому пути - сокращения к идентификаторам. Вы можете выполнить поиск, и он будет работать для IST (Asia/Kolkata), но может не работать для любого другого интересующего вас часового пояса.

let abbreviation = TimeZone.abbreviationDictionary
    .first(where: { $1 == TimeZone.current.identifier })?.key

и я не уверен, останется ли содержимое этого словаря прежним в будущих версиях iOS. Используйте его на свой страх и риск.

person Sweeper    schedule 09.02.2021