Atle
Atle

Reputation: 330

Rails time type and time zones

I have a Rails app that stores time values, and I have set a time zone in config/application.rb.

This works correctly on datetime columns, but time columns show the time in UTC, not the specified time zone.

The time on these two examples are both stored as 20:50 (UTC) in the database, but when I show it in a view the time column shows as UTC and the datetime column is correctly shown in the chosen time zone.

time2:     2000-01-01 20:50:00 UTC
datetime2: 2012-02-09 21:50:00 +0100

Is this expected behavior? Shouldn't time types also use the configured time zone?

Upvotes: 0

Views: 1412

Answers (3)

Atle
Atle

Reputation: 330

I give up this, Rails seems to totally ignore config.time_zone with time attributes and just uses it for datetime attributes for reasons I don't understand. And as it seems, not many others understand it as well.

I will change the time attributes to type string and parse it to a time object when I need to work with it as a time object. If this is fixed in a later Rails release I can always change back to using time attributes, but now I need to go on, this has been holding me back for days.

But thanks for trying to help :)

Upvotes: 0

Michael Irwin
Michael Irwin

Reputation: 3149

Yes, this is expected behavior. Rails (ActiveRecord) stores times in UTC, then coverts them to whatever time zone Time.zone is set to upon rendering in the view.

Upvotes: 0

Baldrick
Baldrick

Reputation: 24340

ActiveRecord uses TimeWithZone, where methods like localtime, utc, utc? may help you.

Upvotes: 2

Related Questions