John Feminella
John Feminella

Reputation: 311636

When should `DateTime.now.utc` vs. `Time.current.utc` be used in Rails?

In Rails, I'm a little confused on the guidance between when to use DateTime.now.utc and Time.current. There seem to be differing opinions inside the framework about which is best, particularly in different versions.

It looks like DateTime.now.utc produces a timestamp with a UTC offset of zero, while Time.current.utc produces a timestamp with a time zone of UTC. That seems like a subtle distinction but it's pretty important in many cases (e.g. DST calculations).

When should you use DateTime.now.utc, and when should you use Time.current.utc? Is there any reason to use DateTime.now.utc instead of Time.current.utc?

Upvotes: 25

Views: 25637

Answers (1)

xdazz
xdazz

Reputation: 160883

I think you should use .current instead of .now.

The difference of .current and .now is .now use the server's timezone, while .current use what the Rails environment is set to. If it's not set, then .current will be same as .now.

Time.current

Returns Time.zone.now when Time.zone or config.time_zone are set, otherwise just returns Time.now.

DateTime.current

Returns Time.zone.now.to_datetime when Time.zone or config.time_zone are set, otherwise returns Time.now.to_datetime.

Upvotes: 58

Related Questions