六曜付カレンダーを作る 其参
2007.05.07 Author: Jas
「六曜付カレンダーを作る」の最終回です。
前回の記事では、「任意の日の旧暦は、その日の直前にある二分二至とそこから三回分の中気、及び五回分の朔を計算することで決定することができる。」ことを紹介しました。この方法を用いれば、閏月の挿入場所を比較的簡単に算出することができます。
しかし、この方法をそのままカレンダーに組み込むのには問題があります。
というのは、二分二至や中気、朔の計算方法が複雑なため、計算に時間がかかるからです。
任意の日の旧暦を求める場合には処理速度0.085秒程度なのであまり気になりませんが、これを一ヶ月分(28~31日分)繰り返すと2.5秒もかかってしまいます。カレンダーを開いたり、月を移動するたびに2,3秒もかかっていたのではストレスを感じてしまいます。
そこで今回は、前回紹介した旧暦計算スクリプトをカレンダーに応用する方法について紹介します。
実は、処理速度をあまり落とさずにカレンダーに応用する方法は簡単です。
なぜなら、一ヶ月分のカレンダーを表示するには、旧暦計算を1回だけ実行すればいいからです。
前回の記事をよく思い出してみてください。
任意の日の旧暦を計算するために朔を5回分も計算していますので、1回の計算で旧暦5ヵ月分の月名と旧暦各月の一日が新暦で何月何日になるかが算出されていることになります。
そのため、カレンダーを表示するときに新暦各月1日の旧暦を求め、そこから次の朔の日まで日付を1ずつ増やしていき、朔日になれば旧暦の月が変わるのでまた1日から日付を割り振っていけばいいわけです。あとは、其壱で紹介したように「(旧暦の月+旧暦の日)÷6」のあまりによって六曜を算出していきます。
例えば、2007年5月のカレンダーなら下記のようになります。
2007年5月 | ||||||
月 | 火 | 水 | 木 | 金 | 土 | 日 |
1 旧暦:3月15日 六曜:大安 | 2 旧暦:3月16日 六曜:赤口 | 3 憲法記念日 旧暦:3月17日 六曜:先勝 | 4 みどりの日 旧暦:3月18日 六曜:友引 | 5 こどもの日 旧暦:3月19日 六曜:先負 | 6 旧暦:3月20日 六曜:仏滅 | |
7 旧暦:3月21日 六曜:大安 | 8 旧暦:3月22日 六曜:赤口 | 9 旧暦:3月23日 六曜:先勝 | 10 旧暦:3月24日 六曜:友引 | 11 旧暦:3月25日 六曜:先負 | 12 旧暦:3月26日 六曜:仏滅 | 13 旧暦:3月27日 六曜:大安 |
14 旧暦:3月28日 六曜:赤口 | 15 旧暦:3月29日 六曜:先勝 | 16 旧暦:3月30日 六曜:友引 | 17 旧暦:4月1日 六曜:仏滅 | 18 旧暦:4月2日 六曜:大安 | 19 旧暦:4月3日 六曜:赤口 | 20 旧暦:4月4日 六曜:先勝 |
21 旧暦:4月5日 六曜:友引 | 22 旧暦:4月6日 六曜:先負 | 23 旧暦:4月7日 六曜:仏滅 | 24 旧暦:4月8日 六曜:大安 | 25 旧暦:4月9日 六曜:赤口 | 26 旧暦:4月10日 六曜:先勝 | 27 旧暦:4月11日 六曜:友引 |
28 旧暦:4月12日 六曜:先負 | 29 旧暦:4月13日 六曜:仏滅 | 30 旧暦:4月14日 六曜:大安 | 31 旧暦:4月15日 六曜:赤口 |
これで「六曜付カレンダーを作る」の課題は無事に終了です。