LoginSignup
0
1

【Swift】日本語化されたタイムゾーンのリストを表示したい

Last updated at Posted at 2023-07-09

SwiftのTimeZone構造体には、日本語のタイムゾーン、地域名、都市名、国名が提供されていません。
そこで、TimezonesJPというGitHubリポジトリを用意しました。

TimezonesJPとは?

このリポジトリは、SwiftのTimeZone.knownTimeZoneIdentifiersメソッドで取得できる全てのタイムゾーン識別子に対応した、日本語での地域名、都市名、国名を提供することを目的としています。

データは以下のURLからアクセス可能です:
https://sugijotaro.github.io/TimezonesJP/timezones.json

TimezonesJPの使い方

まずは、次のような構造体をSwiftで定義します。

struct TimeZoneSection: Codable {
    let region: String
    let region_ja: String
    let cities: [City]
    
    struct City: Codable {
        let timezone: String
        let city: String
        let country: String
        let city_ja: String
        let country_ja: String
    }
}

次に、JSONデータを非同期に読み込むメソッドを定義します。

func loadTimeZones(completion: @escaping ([TimeZoneSection]?) -> Void) {
    let url = URL(string: "https://sugijotaro.github.io/TimezonesJP/timezones.json")!
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        if let data = data {
            let decoder = JSONDecoder()
            if let timeZones = try? decoder.decode([TimeZoneSection].self, from: data) {
                DispatchQueue.main.async {
                    completion(timeZones)
                }
            } else {
                completion(nil)
            }
        } else {
            completion(nil)
        }
    }
    task.resume()
}

この関数を呼び出してデータを取得します。

loadTimeZones { timeZoneSections in
    if let timeZoneSections = timeZoneSections {
        // timeZoneSectionsを利用した処理
    } else {
        // エラーハンドリング
    }
}

以上で、Swiftのプロジェクトでこのリポジトリの提供するJSONデータを利用できるようになります。

タイムゾーン情報の追加・修正のリクエスト方法とコントリビュート方法

都市や国の情報を追加または修正してほしい場合や、直接的な貢献をしたい場合は、READMEに記載されている手順に従ってください。


iOSでのタイムゾーンの取り扱いがこれで少しでも楽になれば幸いです。私たちのリポジトリに関して質問や提案があれば、いつでも歓迎します。皆さんのフィードバックをお待ちしております!

また、デモアプリも用意したのでこちらも参考にしてみてください。

それと、このTimezonesJPを使ったアプリをリリースしています。海外にいる友達の現在時刻が見れるアプリです!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1