From: "たけ(tk)" Date: 2001-02-19T02:19:36+09:00 Subject: [ruby-list:28037] Re: ParseDate.to_time たけ(tk)です。 Yukihiro Matsumoto さん曰く。 》| タイムゾーンの問題は、結局のところ時差という数字の問題に還元できる。基 》|本クラスでは「現在のタイムゾーンの時差」を過去に向かっても適用する。 》 》というのは少々単純に思います。実際、現在のTimeはそれなりに苦 》労してdaylight saving timeにも対応していますが、紀元前2000年 》のタイムゾーンやDSTに意味があるとは思えません。うるう秒はシ 》ステムに任せている(逃げているとも言う)ので、ここでは考える必 》要はないだろうと思いますが。  紀元前2000年の時差を問題にしているのは、クラス内部の値(time_tと同 様の性格を有する値と想定している)を日付に変換する場合に時差が必要になる ということです。  タイムゾーンやDSTが時差に還元される、という理解が単純すぎると言うこと でしょうか?。 》それに対して、UNIX timeとは独立のmxDateTimeの仕様は、好感が 》持てます。タイムゾーンとか最初から切り捨ててるし。  タイムゾーンを切り捨てるという方法は内部の値を time_t と別の性格のもの とするということになるので、「現在のTimeと互換性を保って拡張するという方 針」には反します。(たけ(tk)の勝手な方針ですが・・)。 》暦法についても、ある一定以上の過去を扱うことを決めたなら「グ 》レゴリオ歴の過去への延長」というのは実用的ではないでしょう。 》なんだか、拡張のための拡張のような印象を持ちます。  いや、十分実用的だと思いますよ。たとえば、関ヶ原の戦いを1600年だと か大化改新は645年などと平気で言っています。日本でグレゴリオ暦を採用し たのは1872年なのでそれ以前の日本の日付を西暦で表示するのは、厳格に言 えば誤りになってしまいます。便宜的なものです。  * 西暦って何だろう?。http://macao.softvision.co.jp/dbpwww/index.html では「西暦については、原則として1582年10月4日まではユリウス暦、それ以降 はグレゴリオ暦を採用しています」とある。この暦法切り替え期日が世界的に合 意されたものであれば、Rubyでもこれに従うべきだろう。が unix の cal では そうでないらしいしな・・。 》繰り返しますが、きちんと定義して制限を外すことそのものに対し 》てはそれほど反対はしませんが、「きちんと定義された」と「制限 》を外す」というのは実は両立するのが大変なことではないかと思っ 》ているのです。  日付・時間で当てになるのはPosixTimeとユリウス通日だけだろうと思ってい ます。ユリウス通日は天文学で使われている時間なので信頼感があります。また、 たぶん、この2個は互換性があります。それ以外の暦法による日付・時間に正確 に対応しようとすると大変なことになります。  いわゆる西暦を元から使っていた国々でさえ、ユリウス暦からグレゴリオ暦に 切り替わった日付が地域によってバラバラですなんですから。  結局内部の正確な time_t_ex(ユリウス通日を PosixTime の time_t の形式 に変換した値)を暦法の日付に変換するというのは、(645年のような)便宜 的なものだと思うのです。よって、「過去の日付を表すための世界的に標準とさ れる暦法」が分かるまでは、グレゴリオ暦で逆算しておくのが良いのではないか。 少なくとも「定義が明確」という条件は満たしている。  * ユーザーが妥当だと思う日付が欲しければ、ユリウス通日を返すメソッド を使って適当に変換してくれ、というのが、たけ(tk)の案。 たけ(tk) ggb03124@nifty.ne.jp http://member.nifty.ne.jp/take_tk