在Ruby中調用Date.today
返回當前日期。但是,它在什麼時區?我假設UTC,但我想確保。 documentation沒有聲明任何方式。是UTC的Date.today?
回答
日期沒有時區,因爲它們不代表時間。
這就是說,作爲如何它計算當前日子裏,讓我們來看看這個摘自the code for Date.today
:
time_t t;
struct tm tm;
// ...
if (time(&t) == -1)
rb_sys_fail("time");
if (!localtime_r(&t, &tm))
rb_sys_fail("localtime");
然後繼續使用使用tm
創建Date
對象。由於tm
包含系統的本地時間使用localtime()
,Date.today
因此使用系統的本地時間,而不是UTC。
您可以隨時使用Time#utc
任何Time
其轉換就地爲UTC,或Time#getutc
在UTC返回一個新的等效Time
對象。然後您可以撥打Time#to_date
獲得Date
。所以:some_time.getutc.to_date
。
如果您使用的是ActiveSupport’s time zone support(包含在Rails中),請注意它與Ruby的時間構造函數完全分離,並且不會影響它們(即它不會改變Time.now
或Date.today
的工作方式)。另見ActiveSupport extensions to Time
。
日期的一個實例被表示爲一個天文朱利安天數;它沒有一天的小數部分。雖然Julian Day與GMT相關 - 所以從技術上講,Date的一個實例應該被認爲是GMT時間 - 對於大多數情況,您可以忽略它並將其視爲沒有時區。如果將其轉換爲DateTime或Time,您只會關心時區。
ActiveSupport的日期轉換工具允許您指定是否需要本地時間或UTC。
如:
>> t = Date.today.to_time
=> Wed Apr 18 00:00:00 -0400 2012
>> t.zone
=> "EDT"
>> t = Date.today.to_time(:utc)
=> Wed Apr 18 00:00:00 UTC 2012
>> t.zone
=> "UTC"
查看評論我對@ AndrewMarshall的回答是爲什麼我問了原始問題。基本上,我試圖找出本地系統上的Date.today是否與UTC中系統上的Date.today相同。 – 2012-04-19 03:47:39
正如Andrew所說,Date.today的確從當地時間生成了一個不是UTC的日期。 要獲取與UTC時間相對應的日期,請嘗試Time.now.utc.to_date – 2012-04-19 03:57:12
我只想指出,雖然對於某些國家,忽略日期的時區可能有效,但在新西蘭,您會得到錯誤的日期如果你這樣做,大部分工作日。 (例如,2月13日上午10點,我認爲,12日的2100 UTC)。 – Rich 2017-02-14 03:33:46
您可以通過使用
Time.now.utc.to_date
在紅寶石
比公認的答案好得多。我想知道這是自2012年4月以來增加的。 – 2015-04-28 02:19:39
這是有用的信息,但它不回答這個問題。這回答了相關問題「我怎樣才能得到當前UTC時間的日期?」,海報問Date.today是否使用UTC,而不是如何使用utc獲取日期。 – 2015-11-23 19:49:03
如果你的Rails應用程序被配置爲在時區UTC運行,那麼只要使用Time.zone.today
脫身,否則強制使用Time.now.utc.to_date
您可以使用
Date.current
要獲得關於配置的時區當前的日期。
- 1. Time.zone.now.to_date是否等同於Date.today?
- 2. Rails:Where Date.today過去或是:deadline_date
- 3. 扶手: - Date.today 1.day
- 4. Date.today和Date.yesterday是相同的,但不是在控制檯
- 5. 從UTC UTC時間戳到UTC的UTC
- 6. 是UTC UTC時間夏令時獨立?
- 7. Date.current和Date.today有何區別?
- 8. Ruby和Rails 「Date.today」 格式
- 9. Python date.today顯示第二天
- 10. Rails Date.today到MMDD格式
- 11. 是否提升ptime的UTC?
- 12. 這是在Ruby(on Rails)Date.today的危險覆蓋? (時區)
- 13. Rails與Date.today比較的日期
- 14. 基於Date.today的日期範圍
- 15. 的DateField不採取date.today默認
- 16. 是不是與UTC的iCalendar DTSTART不好?
- 17. 什麼是不同的時刻()。utc()。toISOString()和moment()。utc()。format()
- 18. Rails Date.today是反映服務器部署日期
- 19. 檢查日期時間字段是否等於Date.today
- 20. 什麼是UTC時間
- 21. GMT是否和UTC相同?
- 22. 端點總是UTC/GMT
- 23. Momentjs UTC時間是古怪
- 24. 使用Date.today加入名爲範圍
- 25. Date.today對應於實際日期
- 26. 紀元時間距離UTC一小時,應該是UTC + 1
- 27. 本地到UTC UTC轉換
- 28. PHP的通知:date_default_timezone_set(): 'UTC' 是無效
- 29. 的Javascript UTC時區總是負
- 30. UTC的NSTimeInterval?
感謝您的澄清。我想更好的方法來問我的問題將「與Date.today返回第二天的哪個時區相結合?」我想如果我想要「UTC的今天日期」,我需要做一些類似'Time.now.zone.to_date'(在Rails中)。 – 2012-04-19 03:46:04
'Time.zone.now.to_date'將使用應用程序配置的任何時區。如果你想設置特定代碼塊的時區,在這種情況下爲UTC,那麼值得研究'Time.use_zone('[zone name]')'。 – 2013-07-30 16:33:37
是的,ActiveSupport的時區管理,你可以做'Time.zone.now.to_date',它等於'Time.current.to_date'等於'Date.current'。 – 2013-07-30 16:54:43