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

2007.04.23 Author: Jas

私の課題紹介「六曜付カレンダーを作る」の第二弾です。
まずは簡単に前回の復習を。

【前回のあらすじ】
六曜付カレンダーを作るためには旧暦の計算をしなくてはいけない。
旧暦計算をするためには新月と二十四節気の日付のデータが必要である。
旧暦を計算する問題点は・・・

    1:閏月挿入箇所が変則的なので挿入箇所を決めるのが難しい
    2:新月と二十四節気の計算方法が複雑なので計算に時間がかかる

以上、前回は六曜付カレンダー作成時の難関=「旧暦計算の問題点」を説明しました。

ということで、今回は上に示した旧暦計算の2つの問題点のうち、1番の閏月の挿入箇所の決め方を紹介していきたいと思います。

まず最初に、今回六曜付カレンダーを作る上で参考にしたスクリプトを紹介したいと思います。
オリジナルのスクリプトは高野氏のAWKで、下記より入手可能です。
http://www.vector.co.jp/soft/dos/personal/se016093.html
このスクリプトには旧暦計算に必要な知識、計算方法などの詳しい解説書が付いているので、非常に参考になりました。

次に新月や二十四節気、閏月を計算するときに必要な用語の簡単な説明です。


黄経[こうけい]

月や太陽の位置を、表す座標の値で、 春分点を原点として黄道を基準に測った経度のこと。東回りに測り、0度~360度の値をとる。

朔[さく]

朔とは新月の事。 旧暦では朔を含む日(=新月の日)が各月の1日(朔日)。

中気[ちゅうき]

二十四節気のうち、 太陽黄経が30度の倍数になる日のこと。

二分二至[にぶんにし]

二十四節気のうち、 春分・秋分・夏至・冬至のこと。旧暦では春分・秋分・夏至・冬至を含む月が必ず、2月、5月、8月、11月になる。


(これらを含め用語については高野氏の解説書では詳しく説明されています。)


それでは早速、【問題点1】閏月挿入箇所の決め方を紹介していきます。

閏月が入るかどうかは、暦と実際の月がどのぐらいずれているかによって決まります。
ずれの基準になるのは二分二至です。二分二至を含む月の名前が決まっているので、間にはいる月の名前も必然的に決まってきます。このときに余分な月があれば閏月が入るのがわかるわけです。

そこで、手順1として、旧暦を求めたい日の直前直後の二分二至を求めます。
先に直前の二分二至を求めれば、そこから3回目の中気が直後の二分二至になります。
(二分二至の日は太陽黄経が0, 90, 180, 270度のどれかになる日ですよ!)

例) -------------直前の二分二至 ←最初に計算する
      |   |
      |   |
      | ----------- 中気1
      |   |
     ----------- 計算対象の時刻(旧暦を求めたい日)
        |
      ------------ 中気2
        |
        |
        | 
   --------------- 中気3(=直後の二分二至) ←直前の二分二至から3回目の中気


次に、この2回の二分二至の間と前後の朔を合わせて5回分計算します。
(朔は太陽黄経=月黄経となる日ですよ!)

例) ---------------- 朔1
      |    |
      |    |
    ----- | ------ 直前の二分二至
         |
   --------------- 朔2
         |
         |
     ----- | ----- 中気1
         |
   --------------- 朔3
         |
         |
     ----- | ------ 中気2
         |
    --------------- 朔4
         |
         |
     ----- | ------ 中気3(=直後の二分二至)
         |
   --------------- 朔5

いつもこの図のように朔と朔の間に中気があるわけではありません。
この場合、朔1と朔4に二分二至が含まれているので、この二つの月はは2月、5月、8月、11月のどれかに決まります。すると、2つの間にある朔2・3の月名も必然的に決まりますね。
(今日の旧暦を計算しているとすると、直前の二分二至は春分なので、朔1が2月、朔4が5月です。)

この二つの手順で計算をして、

  • [5回目の朔の時刻]≦[3回目目の中気の時刻] で且つ
  • 「中気を含まない月」

  • が閏月となります。

    この方法を使うと、(直前の二分二至を含む)4回の中気と5回の朔を計算するだけで、求めたい日の旧暦が計算できるのです。


    次回は高野氏の旧暦計算スクリプトをカレンダーに応用する方法について紹介します。

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