I have an ActiveRecord model which contains a timestamp field called
“remember_token_expires_at”. I have Time.now stubbed to return
Time.parse(“Jan 1, 2001”). When I do:
remember_token_expires_at = 90.days.from_now.localtime
save!
reload
I get the expected time in remember_token_expires_at (April 1st,
midnight
local time).
However, when I do:
expires_at = 90.days.from_now
remember_token_expires_at = expires_at.localtime
I instead get April 1st, 5 am!
Specifically, remember_token_expires_at_before_type_cast contains
“2001-04-01 05:00:00”.
I’ve looked at time.c and ActiveRecord::base.rb, and I’m stumped. I
can’t
see how these two cases should differ. According to even their marshal
data from _dump, they don’t. Yet they yield different results.
What am I missing? I’m using Postgres 8.1, and I am aware of some bugs
filed to support time zones, but this shouldn’t be happening even
without
timezone support. This is just “record changes when saved and reloaded,
but only if I initialize it through a temporary variable”…
Jay L.