ふなばです。

At 2000-07-06T11:09:13+0900 (2451731.58973JD),
matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

matz> 日付クラスについて眺めていたときに以下の疑問に遭遇しました。

matz>   * dateとdate2ではAPIの違いの他に、暦計算のアルゴリズムが違っ
matz>     ています(基準となる日も違う)。このアルゴリズムの性質の違
matz>     い(速度、正確さなど)をまとめたページとかは存在しますか?
matz>     ふなばさんのページに書いてあったようにも思うのですが、ど
matz>     こだったかな。

http://www.kt.rim.or.jp/~tadf/programming-and-calendar.html#ruby かな?
でも、アルゴリズムの性質の違いとか書いてないので、役に立たないと思いま
す。

date2 のアルゴリズムは、
Jean Meeus, Astronomical Algorithms, Willmann-Bell,Inc., 1991.
にあるものです。ユリウス日とユリウス暦、グレゴリオ暦の変換が、というこ
とですけどね。それと、ちょっと本とは違うところもあります。

matz>   * date2パッケージに入っているodateはdateとAPI互換ですが、
matz>     使っているアルゴリズムはdate2のものですよね。(確認)

そうです。アルゴリズムを変えて、一部、謎めいたメソッドを削ってあります。

matz>   * date2パッケージでは浮動小数点計算を使っているので、西暦
matz>     10兆年くらいで誤差が24時間を越えます。これはこんなものな
matz>     んですよね。そんな日付を扱うはずがないし。

そうですね。限界があります。ですが、十分ではないかと思います。他でも、
つかわれているやりかたですし、特に問題はないと思っています。

matz>   * 昔、西暦紀元1年の前は紀元前1年だと聞いたことがあります。
matz>     が、dateもdate2も紀元1年の前は紀元0年で、その前が紀元前1
matz>     年としているようです。これはそんなもんなんですか?

これは、天文学の流儀ということで、もともとの Meeus のアルゴリズムその
ままにしてあります。たとえば、理科年表などに載ってますよ。

matz> なんか、ふなばさんに対する個人的な質問のような気もします。^^;;;

他に答える人もいないですしね :)

ふなば ただよし