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を使ったアプリをリリースしています。海外にいる友達の現在時刻が見れるアプリです!