2013-05-27 28 views
1

問題

默認情況下,Chronic gem使用系統時區作爲默認時區。如何將ruby Gem Chronic的默認時區設置爲沒有導軌的特定時區

他們在這裏提到(https://github.com/mojombo/chronic#time-zones),我可以使用ActiveSupports Time.zone來更改它。但是我沒有使用Rails,我使用Sinatra並且包括主動支持來利用時區類似乎沒有必要。

我該怎麼辦?

我在做什麼。

我正在使用Chronic進行系統報告/儀表板和統計。

服務器在utc時間在數據庫的created_at字段中存儲時間戳。 但是我們當然會以PDT的形式運行我們的報告。

我想將默認時區設置爲America/Los_Angeles。 因此:

d = Chronic.parse("1 days ago at midnight") 
date = d.localtime #Should give me a date like "2013-05-27 00:00:00" 
utc_date = date.utc #Should give me a date like "2013-05-27 07:00:00" 

我該如何做到這一點?

回答

1

我會張貼這個作爲評論,因爲我不舒服,基本上是someone else's answer,但我沒有足夠的空間評論。在這些情況下,TZ環境變量很有用。看看這個:

def with_time_zone(tz_name) 
    prev_tz = ENV['TZ'] 
    ENV['TZ'] = tz_name 
    yield 
ensure 
    ENV['TZ'] = prev_tz 
end 

with_time_zone('US/Pacific') { Chronic.parse("1 days ago at midnight") } 
# => 2013-05-27 08:00:00 0100 
with_time_zone('US/Pacific') { Chronic.parse("1 days ago at midnight").localtime } 
# => 2013-05-27 00:00:00 -0700 

您可以設置服務器的本地時間與正確的區域,讓整個應用程序與TZ VAR一套你喜歡跑,或操縱的出路的時候。

+0

我應該補充說,我不認爲這是線程安全的。 – iain