From: Tanaka Akira Date: 2011-11-19T19:50:14+09:00 Subject: [ruby-dev:44891] Re: [ruby-trunk - Bug #5586][Open] Time.at(Marshal.load(Marshal.dump(Time.now))).to_s raise TypeError 2011年11月8日0:42 Tomoyuki Chikanaga : > Time.at(Marshal.load(Marshal.dump(Time.now))).to_s > # => TypeError: false can't be coerced into Fixnum > > Time オブジェクトを Marshal.dump -> load すると TIME_SET_FIXOFF() で > struct time_object の gmt と vtm.utc_offset がセットされるのですが > それを Time.at に渡すと gmt だけコピーされて vtm.utc_offset が (VALUE)0 = Qfalse のままだからのようです。 > > どこが根本的な原因なのかよくわかりませんが、以下のパッチで例外はおきなくなりました。 パッチを入れました。 > るりまの Time.at(time) のページ( http://rurema.clear-code.com/1.9.3/method/Time/s/at.html )を見ると > 「生成された Time オブジェクトのタイムゾーンは地方時となります。」とあるので TIME_GMT_COPY() 自体が > 不要なのかもしれないと思いますがどうでしょう。 time.c 中のドキュメントにはそういう記述はありませんね。 「生成された Time オブジェクトのタイムゾーンは地方時となります。」というのは 実態にあっていないので単なるバグじゃないでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]