Basically, you now need to know if your project uses a "real" time zone or :local
, and if config.active_record.time_zone_aware_attributes
is set to false
or not.
-
With time zones configured, always use
.current
forTime
,Date
, andDateTime
.ActiveRecord attributes will be time-zoned, and
.current
values will be converted properly when written to the database.
Do not useTime.now
and friends. Timezone-less objects will not be converted properly when written to the database. -
With no/local time zone use
Time.now
,Date.today
, orDateTime.now
.ActiveRecord attributes will not be time-zoned.
Using.current
would hand you UTC objects whoseto_s(:db)
may not convert properly.
Legacy behavior in Rails 2.3
It's been briefly mentioned in the random list of ActiveSupport goodies, but please do remember to always use Time.current
instead of Time.now
, etc.
Why?
Because of the way Rails and MySQL deal with time zones you would need to take care to use Time.zone.now
in projects which hold time zone information and Time.now
only in those that run with the server's time. If you don't, bad things can and will happen. More information can be found on that card.
Prefer "current
"
Time.current
decides if it wants to be a Time.zone.now
or a Time.now
depending on the project settings. Using it keeps you sane and happy.
That logic is available for Time.current
, Date.current
and DateTime.current
.