2016-02-18 61 views
1

我试图将外部时区字段的日期时间转换为UTC。有人可以向我解释为什么这不起作用吗?Rails - 时区转换

time_str = '2016-03-01 00:00' 
zone_str = 'Pacific Time (US & Canada)' 

Time.use_zone(zone_str) { Time.parse(time_str).in_time_zone('UTC') } 

我很期待:

'2016-03-01 08:00' 

什么我越来越:

'2016-03-01 06:00' 

基本上,这是无视我use_zone电话,只是用我的本地时区,这是中央。

我应该做些什么呢?

- 编辑 -

请注意,我不是要设置整个应用程序的时区。我只是试图采取一组输入(时间和时区在单独的表单域),并将其转换为UTC。

+1

我接受了@伊利亚的解决方案,但我发现我的特定代码的问题。 'Time.use_zone(zone_str){Time.zone.parse(time_str).in_time_zone('UTC')}'我在做'Time.parse'而不是'Time.zone.parse'。 –

回答

3

尝试这种解决方案:

time = ActiveSupport::TimeZone.new(zone_str).parse(time_str) 
time.in_time_zone('UTC') 
#=> Tue, 01 Mar 2016 08:00:00 UTC +00:00 
+0

是的,就是这样! –

1
time_str = '2016-03-01 00:00' 
zone_str = 'Pacific Time (US & Canada)' 
time = ActiveSupport::TimeZone.new(zone_str).parse(time_str) 
time.in_time_zone('UTC') 

使用上面的代码。

+0

我不想将它分配给整个应用程序 - 仅限于一组输入。 –

+0

所以你通过逐字拷贝正确的答案改变了你的错误答案? –

0

试试这个:

time_str = '2016-03-01 00:00' 
zone_str = 'Pacific Time (US & Canada)' 
Time.zone = zone_str 
Time.zone.parse(time_str).in_time_zone("UTC") 
+0

这是有效的,但是设置'Time.zone'有危险,只能用于单个请求。显然,这可能会泄漏到线程中的下一个请求中。 –