Skip to content

Swiftで旧暦・六曜の計算方法

六曜の計算方法

大安や仏滅などの六曜を取得する方法を調べていたのですが、まずは旧暦を取得し、旧暦から、六曜を取得するようです。計算方法としては、

(旧暦の月 + 旧暦の日) ÷ 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にあげておきました。

https://github.com/yakazu/calculate_rokuyo

コメントを残す

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