2017-05-04 12 views
0

这是我正在进行的一个问题,我不知道如何使用它。Rails 5:将Time.zone(例如“Pacific Time(US&Canada)”)转换为已编号的偏移量(例如-0700)

用户在创建帐户时设置其Time.zone。在这种情况下“太平洋时间(美国&加拿大)”。

当他们创建一个对象,并在日期和它与没有明确的时区字符串的格式输入时间偏移,像这样“2017年5月31日2:00 PM”

知道这两样东西。我想将输入的时间字符串转换为UTC格式并保存。

我试过以下,但它不是以太平洋时间考虑:

time = Time.strptime("05/31/2017 2:00 PM Pacific Time (US & Canada)", "%m/%d/%Y %H:%M %p %Z").utc 
=> 2017-05-31 14:00:00 UTC 

14:00:00 UTC是上午7时区。它应该是21:00:00,因为它目前是-0800。我想找一种方法考虑时区,并以UTC格式正确保存它们。

然而它转换正确,如果我给它,像这样精确的偏移:

time = Time.strptime("05/31/2017 2:00 PM -0800", "%m/%d/%Y %H:%M %p %Z").utc 
=> 2017-05-31 22:00:00 UTC 

这个问题是我的命。我只想将所有日期和时间保存为UTC格式,因此用户所要做的就是正确设置其时区和查看时间。如果适用,也考虑到DST。

回答

1

在Rails中,你可以使用ActiveSupport更改时区,在不改变价值和转换为UTC

#parse time as usual 
time = Time.strptime("05/31/2017 2:00 PM", "%m/%d/%Y %H:%M %p") 

#convert to utc using timezone that you need 
res = ActiveSupport::TimeZone.new('Pacific Time (US & Canada)').local_to_utc(time) 
#> 2017-05-31 21:00:00 UTC 
+0

这工作!我现在可以将时间转换并保存为UTC并且转换正常工作。 – Antonio

相关问题