From: Tanaka Akira Date: 2009-04-27T12:56:58+09:00 Subject: [ruby-dev:38341] Re: Time with arbitrary offset In article , Yukihiro Matsumoto writes: > ただし、civilというメソッド名には反対です。Dateクラスには、ま > ずAD/BCを勘案するCivil Dateという概念があって対応するcivilメ > ソッドがあると理解していますが、私の知る限りcivil timeという > 概念はないし、仮にあったとしてもそれは「任意の時差」とは関係 > しないものだと思います。 では、 Time.new(year, mon, day, hour, min, sec, utc_offset) ならどうでしょうか? 現在の Time.new (というか Time#initialize) は引数をとらない ので、非互換性を起こさずに拡張することができます。 あと、Date クラスが AD/BC を勘案するというのはよく意味がわか りません。少なくとも、紀元前1年であるところの西暦0年はそのま ま通るようです。 % ruby -rdate -e 'p Date.civil(0,1,1)' # なお、私は civil という語をここで用いる理由はよくわかってい ないんですが、検索すると Civil calendar というのがあるので、 これなのかなぁ、と想像しています。 http://en.wikipedia.org/wiki/Civil_calendar > さらにgetlocalメソッドの振る舞いもよくわかりませんでした。同 > じ時間で時差の違うオブジェクトを返すってこと? それもちょっ > と名前から予想される挙動とは違うかもしれません。 time.getlocal は同じ時刻で地方時のオブジェクトを返すので、 time.getlocal("+09:00") などと指定すれば、同じ時刻で指定した 時差のオブジェクトを返すのはそれなりに自然な拡張だと思ってい ます。 % TZ=EST5EDT ./ruby -e ' t = Time.utc(2000,1,1) p t p t.getlocal p t.getlocal("+09:00") p t.getlocal(3600*9) ' 2000-01-01 00:00:00 UTC 1999-12-31 19:00:00 -0500 2000-01-01 09:00:00 +0900 2000-01-01 09:00:00 +0900 こうでないとすると、どういう予想をすると思ったんですか? > あとは、strftimeの%Zをどうするかなんてことも気にならないでも > ないですが、それは対応すればよいだけのことですね。 あぁ、それは送った後に気がついて、手元ではとりあえず空文字列 になるようにしてあります。 -- [田中 哲][たなか あきら][Tanaka Akira]