Forum: Ruby Marshalling a Time loses zone info

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
D046d3c8b40b45f19044671cf6cf40f9?d=identicon&s=25 Brett Simmers (Guest)
on 2007-07-04 04:38
(Received via mailing list)
I was dealing with a weird problem today that I eventually traced back
to the fact that marshalling and unmarshalling a Time object will
implicitly convert it to local time:

t = Time.new
t.utc
s = Marshal.dump t
new_t = Marshal.load s
t.to_s                   # "Wed Jul 04 02:09:05 UTC 2007"
new_t.to_s           # "Tue Jul 03 19:09:05 -0700 2007"

I know that they still represent the same time, but it seems to me like
the zone is an important part of the state of the object.  Is this
intentional or a bug?  This was a problem because my app is getting
objects from a database that's running in UTC.  It gets some Time
objects from the db adapter and sends them, along with some other data,
over the network using DRb (which uses Marshal.dump/load).  These are
then used in another query back to the same database, but the adapter
(OCI8) ignores the time zone.  As a result, the times it was using in
the queries would be 7 hours behind what they should be.  I solved it by
calling .utc on any Time objects that come in over the network to make
sure everything is UTC, but it was an interesting problem.  I'm using
1.8.6, I haven't tried it with 1.9 yet.

-Brett
This topic is locked and can not be replied to.