2015-11-03 58 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