From: "たけ (tk)" Date: 2001-02-18T03:21:00+09:00 Subject: [ruby-list:27994] Re: ParseDate.to_time たけ(tk)です。 Yukihiro Matsumoto さん曰く。 》 その新しいTimeクラ 》スの性質についてきちんと議論して、あるいは調査して決める必要 》があるんじゃないでしょうか? 賛成、というか当然ですね。 》があるんじゃないでしょうか? ふなばさんが以前おっしゃったよ 》うに、紀元前2000年のタイムゾーンや世界時に意味があるんでしょ 》うか? 問題はないのでしょうか? 今のTimeクラスを継承したなに 》かを作るってのはそういう意味ですよね。  紀元前2000年でも地球が丸い以上は時差の問題があります。ユリウス日では 「ユリウス暦の4713BC1月1日世界時正午を起点(第0日)として数えた日数に相当 します(小数部をも考慮する場合は、日本時間午後9時に小数点以下が 0 になる ものと考えてください)」とあるように、世界時を基準に定められており、場所 による時差を考慮するようになっています。 http://www.asahi-net.or.jp/~dd6t-sg/when/when2.html * 以下の引用も同じ。  世界時1970年1月1日正午のユリウス日は2440587.0なので(天 文手帳)、time_t_exの内部的な値はユリウス日から2440587.5を引い て24*60*60をかけた値とする。とすることで、time_tとの互換性を保つ ことができると思います。  time_t_exから日付への換算は、(暦法の指定がない限り)グレゴリオ歴の計 算方法で計算した日付とする。つまり「400年に97回閏年を置く太陽暦」という 計算方法で過去に向かっても逆算で日付を算出する。  * unixのcalは「unix のcal コマンドで 1752年 9月をみてみると、イギリ スでの暦法の切り替えの様子がわかります」とあるようにイギリスでの暦法切り 替えを反映しているようです。しかし「1582/10/15 イタリア、スペイン、ポル トガル、ポーランド[9]」「 1873/01/01 日本(キリスト教の宣教師は1585頃から [19])」とあるように国によってグレゴリオ歴を採用し始めた時期は異なる。  グレゴリオ歴以外の暦法の指定は基本クラスには含めずに、必要なら拡張ライ ブラリで対処する。  タイムゾーンの問題は、結局のところ時差という数字の問題に還元できる。基 本クラスでは「現在のタイムゾーンの時差」を過去に向かっても適用する。  各国のタイムゾーンの時差も歴史的に変動があるが、それらは、必要なら拡張 ライブラリで対処する。  閏秒の問題は、1970以前には存在していないので(理論的にはありうると は思うが)過去のtime_t_exの値に関しては問題が生じない。現在のTimeクラス での閏秒への対応はシステムによって異なる。2052年でしたっけ?、32ビット unixでのtime_tの限界を越えた後のtime_t_exとtime_tとの互換性が問題になる。 閏秒を考慮するシステムではtime_t_exでも考慮するようにしなければならない。  という程度を考えています。  暦法のややこしい問題はTime#jd(ユリウス日を返すメソッド)でユリウス日 を取り出せるようにしておき、適当に処理してもらう、というのが良いと思う。 −− RubyWinでは・・ Ruby -e "p Time.mktime(2001,1,1).to_i" 978274800 ←100の倍数なので閏秒はおそらく考慮していない。 たけ(tk) ggb03124@nifty.ne.jp http://member.nifty.ne.jp/take_tk