Sponsor Link
環境&対象
- macOS15.0.1 Sequoia
- Xcode 16.1 Beta3
- iOS 18.1
- Swift 5.9
Calendar/ Date
Swift では、Foundation に Calendar や Date が用意されています。
参考
CalendarApple Developer Documentation
参考
DateApple Developer Documentation
Calendar と Date の役割分担が勘違いしやすいですが、Date は、カレンダーに影響されない 時間の表現のための型です。
地域によるカレンダーの差異は、Calendar が管理しています。
意味わからないですよね・・・
具体的に書くと、”72時間後” と”3日後の同時刻 “は 同じでないかも知れないということです。
“72時間後” は、Date で計算できますが、
“3日後の同時刻 “は、Calendar なしには計算できません。
なぜなら、世界では”夏時間” を採用している地域もあり、その切り替えが3日以内に行われるケースでは、
3日後の同時刻は、72時間(=24 時間x3) 経過した時刻とおなじであるかわからないからです。
大抵のアプリではおおよそ Gregorian 暦を使用している気がするので、あまりカレンダーを意識しないかも知れません。
月の日数
Calendar なしにわからないものの1つに、”月の日数” があります。
日数を直接返してくるメソッドはありませんが、”指定Component 内で 特定のComponent が持ちえる範囲を返す API ” が用意されているので、そのAPIを使用して取得します。
参考
range(of:in:for:)Apple Developer Documentation
”of: に渡した Componentt” が “in: で渡した Componentt” 内で取り得る範囲を返してきます。
ただし、日数を直接返してくるわけではありませんので、以下のステップで取得することが必要です。
以下では、作成した日付(2024/10/12) の含まれる月の日数を求めています。
import Foundation
let date = Calendar.current.date(from: DateComponents(year: 2024,
month: 10, day: 12))!
if let dateRange = Calendar.current.range(of: .day, in: .month, for: date) {
let dayNum = dateRange.count
print(dayNum)
}
// print-out
"Oct 12, 2024 at 0:00"
31
"31\n"
なお、Gregorio 暦では、2月以外の日数は固定ですので、わざわざ上記の API を使用しなくても良いかも知れません。
2月の日数を計算する時には、この API を利用すれば、うるう年か判定する “西暦を 4、100、400 それぞれで割り切れるかどうかを使って判定する” という手間がなくなります。
上記APIを使うのと、3回の剰余計算は どちらを手間に感じるかは人によるかも・・・
Calendar.current.range(of: .day, in: .year, for: date) としてその年の日数を調べることももちろんできます。
まとめ
月の日数を算出する方法を確認しました。
- うるう年の2月以外は、固定値
- 2月の日数計算は Calendar の用意している API を使用する
- range(of:in:for:) がそのAPI
- 西暦の4,100,400 それぞれの剰余からも計算できる
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
SwiftUI おすすめ本
SwiftUI を理解するには、以下の本がおすすめです。
SwiftUI ViewMatery
SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。
英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。
View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。
超便利です
販売元のページは、こちらです。
SwiftUI 徹底入門
# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。
Swift学習におすすめの本
詳解Swift
Swift の学習には、詳解 Swift という書籍が、おすすめです。
著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。
最新版を購入するのがおすすめです。
現時点では、上記の Swift 5 に対応した第5版が最新版です。
Sponsor Link