もりきゅうです。 Tadayoshi Funaba さんは書きました: >ちょっとみただけですが、これは旧暦とはいえないと思います。いわゆる旧暦 >は、月の決定がなかなか複雑ですが、このプログラムでは閏月を考慮している >ふうもなさそうなんですが、どうなんでしょう。 旧暦は ・新月(月齢 0.0)を含む日を 1日とする。 ・太陽の位置で決まる節気で月を決める。 という規則です。たしかに天保の改暦以降は月の決定が 3か月区切りで行われる ので,任意の新暦から旧暦を得るのは難しいです。カレンダーを作るようにすれ ば比較的簡単になると思われます。 閏月は必然的に決まりますので,月齢が正しく計算されていれば問題ありません。 ただし「閏」という字を付ける必要はありますね。^^; 例えば 1998 年は 閏5月 があります。 新暦 6/24 が 旧暦 閏5/1 になるはず。で,やってみると.. ありゃ,6/1 になりますね。 新暦 7/23 が 旧暦 6/1 になるはず。で,やってみると.. ちゃんと 6/1 になります。ということは 閏6月 となってしまっているわけだ。 旧暦の日付を計算する Ephem::lunar_mday の精度がいまいちなので,こういう 事態が生じています。 月齢を Fixnum::to_i で切り捨てて旧暦の日を得るわけですが 0.99 と 1.00 などの境界にあたる数値では+1日の誤差が生じてしまう。なので,前日・翌日 の月齢も計算して判断しています。この辺りのロジックをもっと正確に組まな いといけないですね。 やっぱり,カレンダーを作る形式にしようかな。 >あと、lunar calendar というと、太陰暦のことのようだから、月についての >暦、くらいのつもりなら、almanac がよいかも。旧暦についていうなら、太陰 >太陽暦ですから、luni-solar calendar の一種ということになりますが。 ああ,そのとおりです。almanac にします。 # 日付は月齢に基づき,月は黄道に基づく。 ありがとうございました。 ---- Kazuhiro Yoshida moriq.kazuhiro / nifty.ne.jp