暦アプリ作ってみようか 8 ~二十八宿を判定してみよう~
暦アプリを作っていくシリーズ、今回は二十八宿を判定させてみたいと思います。
二十八宿は、もともとは中国で月の天球上の位置を示すために作られたもので、天球上の月の通り道を28の星座に不均等に分割したものだそうです。一区分を「宿」と言い、月は1夜ごとに宿を一つずつ通過し、約28日で一回りすると考えられているとのこと。
二十八宿はやがて吉凶を占うものとして使われるようになっていったようです。
宿毎の吉凶の内容は他のサイトの解説に任せるとして、VB.NETのソースを示しておきましょう。
Public Function Calc_Nijyuhassyuku(TargetDate As Date) As String
' 二十八宿の配列
Dim Nijyuhassyuku() As String = {"角", "亢", "氐", "房", "心", "尾", "箕", "斗", "牛", "女", "虚", "危", "室", "壁", "奎", "婁", "胃", "昴", "畢", "觜", "参", "井", "鬼", "柳", "星", "張", "翼", "軫"}
' 基準日: 基準となる日の二十八宿を設定 (例: 1980年1月10日は"角")
Dim BaseDate As Date = New Date(1980, 1, 10)
Dim BaseIndex As Integer = 0 ' 0は「角」に対応
' 基準日からの経過日数を計算
Dim DaysDifference As Integer = (TargetDate - BaseDate).Days
' 二十八宿のインデックスを計算
Dim NijyuhassyukuIndex As Integer = (BaseIndex + DaysDifference) Mod 28
' インデックスが負の場合、正の値に変換
If NijyuhassyukuIndex < 0 Then
NijyuhassyukuIndex += 28
End If
' 対応する二十八宿を返す
Return Nijyuhassyuku(NijyuhassyukuIndex)
End Function
関数Calc_Nijyuhassyukuに任意の年月日を入れると、その日に対応する「宿」を返します。
ここでは1980年1月10日が「角」であること、二十八宿は規則的に繰り返されていることを利用して、基準日から何日離れているかで二十八宿を求めます。
調べたい日の二十八宿が分かれば、吉凶の表示もより豊かになっていきます。
引き続き、少しずつプログラムを作り進めていきます。
つづく