2011-08-26 121 views
2

我有一個cron任務,每天運行一次,使用Heroku的Daily Cron插件。 cron從昨天的數據中獲取值,並用今天的時間戳創建所需的對象。但是,我面臨着不尋常的情況。這是從Heroku控制檯:Heroku控制檯怪異日期問題

>> Date.today 
=> Thu, 25 Aug 2011 
>> Date.yesterday 
=> Thu, 25 Aug 2011 
>> DateTime.now 
=> Thu, 25 Aug 2011 23:31:42 -0700 

目前的時間是23點31分,我想過以後試一試。這是我現在有:

>> Date.today 
=> Fri, 26 Aug 2011 
>> Date.yesterday 
=> Thu, 25 Aug 2011 
>> DateTime.now 
=> Fri, 26 Aug 2011 00:35:14 -0700 

任何想法爲什麼Date.today和Date.yesterday提供相同的結果。是由於時區或其他特定設置?

謝謝

+0

聽起來像是對我的錯誤,但你可以設置通過heroku配置heroku時區:添加TZ =歐洲/柏林 – phoet

回答

3

Date.today根據您的服務器時間表示日期,與您設置的時區無關。

Date.yesterday is Time.now.in_time_zone - 1.day。這取決於我們已經建立

這個例子應該澄清Time.zone:

ruby-1.9.2-p180 :014 > Time.now => 2011-08-26 03:21:10 +0545

ruby-1.9.2-p180 :015 > Time.zone => (GMT+00:00) UTC

ruby-1.9.2-p180 :016 > Time.now.in_time_zone => Thu, 25 Aug 2011 21:36:40 UTC +00:00

ruby-1.9.2-p180 :018 > Date.yesterday => Wed, 24 Aug 2011

ruby-1.9.2-p180 :017 > Date.today => Fri, 26 Aug 2011

現在,設定時區爲加德滿都後。如預期Date.yesterday的變化,但有是Date.today沒有變化

ruby-1.9.2-p180 :019 > Time.zone="Kathmandu" => "Kathmandu"

ruby-1.9.2-p180 :022 > Time.now.in_time_zone => Fri, 26 Aug 2011 03:55:28 NPT +05:45

ruby-1.9.2-p180 :020 > Date.yesterday=> Thu, 25 Aug 2011

ruby-1.9.2-p180 :021 > Date.today => Fri, 26 Aug 2011

+0

嗯..似乎是問題..所以, Date.yesterday is Time.now.in_time_zone - 1.day – prasvin

2

Date.Today是ruby提供的默認方法。 Date.Yesterday雖然不是ruby方法,但由Rails作爲其核心擴展的一部分提供。

Date.Yesterday返回Date.current.yesterday

Date.Current從Rails文檔引用,

返回Time.zone.today時Time.zone或config.time_zone設置, 否則直接返回日期今天

看來這就是爲什麼你得到這兩種方法相同的日期。

+0

您違反了上述第一個沒有設置時區的例子。 Date.current不能是Date.today,因爲Date.yesterday顯示爲Wed而非Thu。 因此,第一種情況是時區設置與否的實例?我想時區已經設置,否則它應該是零。只有這兩個答案 - 你和Abhaya互相支持。 反正謝謝。 – prasvin