2011年11月8日0:42 Tomoyuki Chikanaga <nagachika00 / gmail.com>:

> 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]