我有一个rails应用程序,它在application.rb中设置了时区:
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_at是没有时区的时间戳。
取而代之的是:
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)")
没有修复。看来我想要做的很简单。进入时间戳调整我们当前设置的时区并进行相应调整。
我将如何使这项工作?
答案 0 :(得分:0)
DateTime的默认偏移量为0,这意味着它默认为UTC提供了一个DateTime对象("非时区' 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
参数是偏移量,它告诉DateTime您的时区是在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