[SwiftDate] ローカルの特定の時間の作り方

アプリケーションの中で、リージョンも含めて時間をきちんと扱うことは、意外と大変です。リージョン含めてどうやって扱うかのメモです。

日本時間の昼の12時作れますか?

DateComponentを使って、かつ、時差9時間を理解していれば一瞬です。

var dateComponent = DateComponents()
dateComponent.year = 2020
...
let date = dateComponent.date ?? Date()

でも、ローカル時間のお昼となると・・・・




SwiftDateなら簡単でした。

SwiftDateは、Dateにメソッドを追加するだけではなくて、DateInRegionというstructを導入しています。

// 現在のRegionでの時刻を取得(時刻にRegionが合わせて設定されている)
let dateInRegion = DateInRegion(Date(), region: Region.current)
// Regionでの1日の始まりの時間を取得(現地での午前0時)
let am0 = dateInRegion.dateAtStartOf(.day)
// 12時間進めるとお昼(全世界共通のハズ)
let noon = am0.dateByAdding(12, .hour)

DateInRegionで、dateAtStartOfとすると、そのローカル時間を考えて処理してくれます。
お昼にするメソッドはないけど、「その日のはじめにする」と「指定時間すすめる」を組み合わせれば簡単に実装できます。

SwiftDateすごい

Swift本

SwiftにもDateとTimeZoneという概念があり、その上に、RegionやDateInRegionというものをSwiftDateでは、導入しています。
NSDate/DateやTimeZoneそのものを解説している書籍はあまり見当たりません・・・・
Swiftそのものを、以下の本で確認してもらってから、Appleドキュメントのこれとかを読んでもらうのが良いかと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です