In the Rails do not prefer to use Time.now, Date.today etc
We should always prefer to use it with zone like, Time.zone.now, Time.zone.today etc. but why so?
Beacause when we fetch Time.now its always return system local time and ignore config.time_zone
set in the application.rb.
file. Here is the example tested in the rails console,
3.0.3 :001 > Time.now
=> 2022-04-19 09:57:58.413034249 +0530
3.0.3 :002 > Time.zone
=> #<ActiveSupport::TimeZone:0x000055704feec360 @name="UTC", @tzinfo=#<TZInfo::DataTimezone: Etc/UTC>, @utc_offset=nil>
3.0.3 :003 > Time.zone.now
=> Tue, 19 Apr 2022 04:28:07.277000358 UTC +00:00
3.0.3 :004 > Time.zone = 'Sydney'
=> "Sydney"
3.0.3 :005 > Time.zone
=> #<ActiveSupport::TimeZone:0x000055705192d850 @name="Sydney", @tzinfo=#<TZInfo::DataTimezone: Australia/Sydney>, @utc_offset=nil>
3.0.3 :008 > Time.now
=> 2022-04-19 09:58:48.79600594 +0530
3.0.3 :009 > Time.zone.now
=> Tue, 19 Apr 2022 14:28:53.212277352 AEST +10:00
3.0.3 :011 > Date.today
=> Tue, 19 Apr 2022
3.0.3 :013 > Time.zone.today
=> Tue, 19 Apr 2022
3.0.3 :001 > Time.zone = 'Pacific/Honolulu'
=> "Pacific/Honolulu"
3.0.3 :002 > Time.now
=> 2022-04-29 14:07:16.545158529 +0530
3.0.3 :003 > Time.zone.now
=> Thu, 28 Apr 2022 22:37:23.106048830 HST -10:00
3.0.3 :004 > Date.today
=> Fri, 29 Apr 2022
3.0.3 :005 > Time.zone.today
=> Thu, 28 Apr 2022
3.0.3 :006 > Date.current
=> Thu, 28 Apr 2022
3.0.3 :004 > Time.now => 2022-05-23 09:47:57.242670312 +0530
3.0.3 :005 > Time.zone
=> #<ActiveSupport::TimeZone:0x0000559d69a7c0e0 @name="UTC", @tzinfo=#<TZInfo::DataTimezone: Etc/UTC>, @utc_offset=nil>
3.0.3 :006 > Time.zone = 'Pacific/Honolulu'
=> "Pacific/Honolulu"
3.0.3 :007 > Time.zone
=> #<ActiveSupport::TimeZone:0x0000559d6974b6f0 @name="Pacific/Honolulu", @tzinfo=#<TZInfo::DataTimezone: Pacific/Honolulu>, @utc_offset=nil>
3.0.3 :008 > Time.now
=> 2022-05-23 09:49:27.289810693 +0530
3.0.3 :009 > Time.zone.now
=> Sun, 22 May 2022 18:19:37.707613755 HST -10:00
3.0.3 :010 > Time.now.localtime
=> 2022-05-23 09:49:42.857303049 +0530
Time.zone
Time.now
Time.now.localtime
Time.zone.now
Time.zone.today
Time.current
Date.today
Date.today.to_time
Time.parse("2022-07-06 09:59:07")
Time.strptime("2022-07-06T09:59:07+0530", "%Y-%m-%dT%H:%M:%S%z")
2.hours.ago
Date.current
1.day.from_now
Time.zone = 'Pacific/Honolulu'
Time.zone
Time.now
Time.now.localtime
Time.zone.now
Time.zone.today
Time.current
Date.today
Date.today.to_time
Time.parse("2022-07-06 09:59:07")
Time.strptime("2022-07-06T09:59:07+0530", "%Y-%m-%dT%H:%M:%S%z")
2.hours.ago
Date.current
1.day.from_now
===============================================================
DON’T USE
* Time.now
* Date.today
* Date.today.to_time
* Time.parse("2015-07-04 17:05:37")
* Time.strptime(string, "%Y-%m-%dT%H:%M:%S%z")
DO USE
* Time.current
* 2.hours.ago
* Time.zone.today
* Date.current
* 1.day.from_now
Reference -
1. https://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
2. https://en.wikipedia.org/wiki/List_of_time_zones_by_country
3. https://thoughtbot.com/blog/its-about-time-zones
Comments
Post a Comment
Let me know for any query..