# TimeWithZone seems in rails 2.3 seems broken...is this the correct behavior?

**URL:** <https://www.ruby-forum.com/t/timewithzone-seems-in-rails-2-3-seems-broken-is-this-the-correct-behavior/164367>\
**Category:** Rails\
**Created:** [March 31, 2009, 4:09pm UTC](https://www.ruby-forum.com/t/timewithzone-seems-in-rails-2-3-seems-broken-is-this-the-correct-behavior/164367 "2009-03-31T16:09:15Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![suer\_rick](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bc8723/32.png) [@suer\_rick](https://www.ruby-forum.com/u/suer_rick)\
**Post date:** [March 31, 2009, 4:09pm UTC](https://www.ruby-forum.com/t/timewithzone-seems-in-rails-2-3-seems-broken-is-this-the-correct-behavior/164367/1 "2009-03-31T16:09:15Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![suer\_rick](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bc8723/32.png) [@suer\_rick](https://www.ruby-forum.com/u/suer_rick)\
**Post date:** [March 31, 2009, 5:35pm UTC](https://www.ruby-forum.com/t/timewithzone-seems-in-rails-2-3-seems-broken-is-this-the-correct-behavior/164367/2 "2009-03-31T17:35:36Z")

</div>

I am no expert on this but Timezone works ok for me on Rails 2.2.2 so my  
comments below may help.  
Which version of Rails are you using?

2009/3/31 Rick S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> My environment.rb contains  
> config.time\_zone = ‘UTC’

Where is this located in environent.rb. Mine is inside the do |config|  
…  
end block. Also I have ‘London’ rather than ‘UTC’ though I doubt if  
this is  
the problem. Anything is worth trying though.

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

Are you sure SQL Server is not adjusting the value for you before it  
gets to  
Rails, thinking that you want it in local time?  
Have you tried picking the query up out of the rails log and entering  
that  
directly into SQL server to see what you get?

> =\> Mon, 30 Mar 2009 16:00:00 UTC +00:00

The fact that this is showing the wrong time but the one above shows  
apparently the right one does suggest that Rails thinks that the zone is  
your local zone for some reason, as you have surmised.

---

<div class="post-metadata">

**Author:** ![suer\_rick](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bc8723/32.png) [@suer\_rick](https://www.ruby-forum.com/u/suer_rick)\
**Post date:** [April 1, 2009, 5:38am UTC](https://www.ruby-forum.com/t/timewithzone-seems-in-rails-2-3-seems-broken-is-this-the-correct-behavior/164367/3 "2009-04-01T05:38:10Z")

</div>

Indeed, this isn’t the expected behavior. My best guess here is, maybe  
ActiveRecord::Base.default\_timezone is being set to :local somewhere?  
If that were the case, then all times returned from the database would  
be shifted based on your system local UTC offset, and thus mess things  
up.

If you run Event.default\_timezone in the console, what does it return?
