六曜の計算方法
大安や仏滅などの六曜を取得する方法を調べていたのですが、まずは旧暦を取得し、旧暦から、六曜を取得するようです。計算方法としては、
(旧暦の月 + 旧暦の日) ÷ 6
の余りが、0大安、1赤口、2先勝、3友引、4先負、5仏滅となるようです。
旧暦がわかれば簡単に求められそうなのですが、現在のグレゴリオ暦の日付から旧暦を求める計算方法が、閏月などを考慮したりと複雑です。(Google検索で六曜 計算方法 プログラミング
などででてきたページを見た感じの印象)
Swiftで旧暦の取得
難しそうな旧暦の取得方法ですが、Swiftではとても簡単に取得できることを知りました。
Calendarのidentifierにchineseを指定することで、旧暦を簡単に取得できます。chineseは旧暦を英語でChinese Calendarというからみたいです。
let calendar = Calendar(identifier: .chinese)
let dateComponents = calendar.dateComponents([.year, .month, .day], from: Date())
print(dateComponents.month)
print(dateComponents.day)
以上で旧暦の月と日を取得できます。
https://developer.apple.com/documentation/foundation/calendar
Swiftで六曜の取得
後は取得した旧暦の月と日を6で割った余りから六曜が取得できます。
if let month = dateComponents.month, let day = dateComponents.day {
let result = (month + day) % 6
switch result {
case 0:
return "大安"
case 1:
return "赤口"
case 2:
return "先勝"
case 3:
return "友引"
case 4:
return "先負"
case 5:
return "仏滅"
default:
break
}
}
サンプルコードをGitHubにあげておきました。