暦アプリ作ってみようか 5 ~六曜を判定してみよう~
前回の不成就日の判定プログラムで旧暦を扱う部分が出てきました。今回はその流れを引き継いで、六曜を返す関数 Calc_Rokuyouを作ってみます。
六曜の計算方法は比較的シンプルで、旧暦の(月の数字+日の数字)÷6という式の余りを計算します。0だと大安、1だと赤口のように続きます。
VB.NETのソースはこちら
Public Function Calc_Rokuyou(ByVal calc_date As Date) As String
' 日本の暦のカルチャーを使用して旧暦の日付を取得
Dim jpCalendar As New JapaneseLunisolarCalendar()
Dim lunar_year As Integer = jpCalendar.GetYear(calc_date)
Dim lunar_month As Integer = jpCalendar.GetMonth(calc_date)
Dim lunar_day As Integer = jpCalendar.GetDayOfMonth(calc_date)
Dim uruMonth As Integer = jpCalendar.GetLeapMonth(jpCalendar.GetYear(calc_date), jpCalendar.GetEra(calc_date))
' 閏月を含む場合の月を補正
If uruMonth > 0 AndAlso lunar_month - uruMonth >= 0 Then
lunar_month -= 1 ' 旧暦月の補正
End If
' 六曜の計算 (旧暦月日を基準に計算)
Dim rokuyou_index As Integer = (lunar_month + lunar_day) Mod 6
' 六曜の名前を配列で定義
Dim rokuyou_names() As String = {"大安", "赤口", "先勝", "友引", "先負", "仏滅"}
Return rokuyou_names(rokuyou_index)
End Function
Calc_Rokuyouに任意の年月日を入力して実行すると、六曜が戻り値として返されます。
少しずつ計算できるものが増えてきました。
つづく