![](/img/trans.png)
[英]What's the best way to convert a Date to a DateTime in the current timezone in Rails 4?
[英]easiest way to convert a DateTime in rails for the non-timezone'd offset
我有一个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)")
没有解决。 看来我想做的事情很简单。 将当前的时区设置为时间戳,然后进行相应调整。
我将如何进行这项工作?
DateTime的默认偏移量为0,这意味着默认情况下它以UTC(如您所说的那样为“非时区”)为您提供DateTime对象:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.