2015-11-03 62 views
0

我有了與application.rb中設置時區一個Rails應用程序:最簡單的方式抵消

config.time_zone =「太平洋時間(美國&加拿大)」

我想保存時間爲:

day, hour=25, 10 
.... 
params[:order][:pickup_at] = DateTime.new(2015,11,day,hour,00,00) 

,並認爲這將寫成

2015-11-25 18:00:00 

進入我們的表,這是一個Postgres 9.4實例,而pickup pickup是一個沒有時區的時間戳。

相反,它是:

2015-11-25 10:00:00 

做:

params[:order][:pickup_at] =DateTime.new(2015,11,25,10,00,00).in_time_zone("Pacific Time (US & Canada)") 

doessn't修復。看來我想要做的事很簡單。進入時間戳調整我們當前設置的時區並相應地進行調整。

我該如何做這項工作?

回答

0

的DateTime有一個默認的偏移量爲0,這意味着它爲您提供了默認情況下在UTC DateTime對象(「非timezone'd」你把它):

http://ruby-doc.org/stdlib-2.2.3/libdoc/date/rdoc/DateTime.html#method-c-new

如果UTC時間要指定是2015-11-25 18:00:00,你應該寫:

day, hour=25, 10 
.... 
params[:order][:pickup_at] = DateTime.new(2015,11,day,hour,00,00,'-8') 

這最後-8參數偏移,它告訴日期時間,你的時區是PST。

DateTime.new(2015,11,day,hour,00,00,'-8').utc 

然後得出:

Wed, 25 Nov 2015 18:00:00 +0000 

如果你想使你的應用的時區這個充滿活力的,你可以寫:

day, hour = 25, 10 
# Take application timezone offset in seconds and convert it to hours 
hour_offset = Time.zone.utc_offset/60/60 
params[:order][:pickup_at] = DateTime.new(2015,11,day,hour,00,00, hour_offset.to_s).utc