繁体   English   中英

最简单的方法来将DateTime转换为非时区偏移量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM