I have tried setting the config.time_zone to local timezone, but Rails 3
still insist on saving in UTC.
If you really must have local time in the db then lie to Rails by
setting config.time_zone to UTC, this tells it that it is to assume
that timestamps are already in UTC so it will not need to change them
to get them into what it thinks is UTC.
An alternative is to manually generate UTC timestamps with the same
value as the local times you wish to save, so
timestamp = Time.utc( timestamp.year, timestamp.month, … )
Changing the date/time data in my DB is not really an option as there
are other integrated systems that are relying on localized timezone
data.
Is there a way retain the old behavior of Rails 2.3.8?
I find it odd that it worked in 2.3.8, that version should also have
stored data in UTC
config.active_record.default_timezone determines whether to use
Time.local (if set to :local) or Time.utc (if set to :utc) when pulling
dates and times from the database. The default is :local.
I think you may be misinterpreting that. I think that is setting
the timezone that it will put the value in when you read it from the
db. I think you will find it is still stored in the db in utc. Have
a look directly at the db data to see.
config.time_zone sets the default time zone for the application and
enables time zone awareness for Active Record.
config.active_record.default_timezone determines whether to use
Time.local (if set to :local) or Time.utc (if set to :utc) when pulling
dates and times from the database. The default is :local.
<<<<
By setting the two parameters as below, things seem to work as before,
except now with Timezone support.
More testing needed before I can ascertain they’re working as they
should.