My environment.rb contains
config.time_zone = ‘UTC’
If my understanding is correct, rails should assume time values coming
from the database are UTC, and since config.time_zone is set to ‘UTC’,
it should not try to convert the times.
Instead, rails is assuming that the db values are Eastern (my local
zone) and is incorrectly adding four hours to convert to what it
thinks is UTC. Either my understanding of how this is supposed to
work is wrong, or something needs to be fixed.
I created a test table in a SQL Server database with one row. The
table is called events and
contains an “edate” column. The value is “2009-03-30 12:00”, and is a
UTC time.
The output from script/console is below. (results are identical to
using a browser)
What else do I need to do to convince rails to leave the time value
alone, since it is a UTC value?
I can get the correct value by extracting the “Time” with no zone, and
then recreating a new TimeWithZone. But that can’t be the best way!
Loading development environment (Rails 2.3.2)
Time.zone
=> #<ActiveSupport::TimeZone:0xb795cbc8 @tzinfo=nil, @utc_offset=0,
@name=“UTC”>
event=Event.find(1)
=> #<Event id: 1, edate: “2009-03-30 12:00:00”>
event.edate
=> Mon, 30 Mar 2009 16:00:00 UTC +00:00
zutc= ActiveSupport::TimeZone.new(‘UTC’)
=> #<ActiveSupport::TimeZone:0xb795cbc8
@tzinfo=#<TZInfo::DataTimezone: Etc/UTC>, @utc_offset=0, @name=“UTC”>
correct_time = ActiveSupport::TimeWithZone.new(event.edate.localtime,zutc)
=> Mon, 30 Mar 2009 12:00:00 UTC +00:00