六曜付カレンダーを作る 其参

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日
六曜:赤口

これで「六曜付カレンダーを作る」の課題は無事に終了です。

名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ