いわゆる世界時計を作りたくて、Timezoneを調べてみたのでメモ。
TimeZone
Swiftの中では、TimeZoneというStructがその概念を表すものです。
identifierとabbreviation
もちろん、GMT(世界標準時)からの時間差分も持っていますが、それ以外の情報として、identifierとかabbreviationとか持っています。
- identifier
- IDです。
“America/New_York”とか”Asia/Tokyo”とか - abbreviation
- IDの両略形。
“EST”とか”JST”とか - localizedName
- 調べてません
knownTimeZoneIdentifiers
世界中の時間帯がすべて入っていると思うのですが、既知のTimeZoneという情報を持ってます。 static で、もちろん get しかできません。
自分でいろいろなTimeZoneをインスタンス化したのであれば、ここから該当TimeZoneを持ってきてインスタンス化するのが、良いです。
1 |
TimeZone.init?(identifier: String) |
というイニシャライザがあります。?なのは、おそらく知らないidentifierを渡されたらnilが返るのではないかと思います。(未検証)
abbreviationDictionary
abbreviationからidentifierへの辞書も用意されてます。
まとめ
自分は、利用可能なTimeZoneのリストを作りたかったので、以下のようなコードでTimeZoneの配列を作成しました。
1 2 3 4 5 6 7 8 9 |
func setupTimezone() { var timeZoneList:[TimeZone] = [] // print(TimeZone.knownTimeZoneIdentifiers) // print(TimeZone.abbreviationDictionary) for key in TimeZone.abbreviationDictionary.keys { timeZoneList.append(TimeZone.init(abbreviation: key)!) } return } |
Tips
IdentifierやAbbreviationなど色々な表記方法/指定方法があるので、アプリ内部での表現方法を決めておかないとハマります。Sponsor Link