Ruby String to_time坏了吗?

时间:2012-03-20 12:06:40

标签: ruby-on-rails ruby json time

我希望Time和to_time能够反思。

更新

这就是答案,如果你添加参数:local,它不会忽略偏移量。我发现它默认忽略了数据(偏移量),但是......

Time.zone.now.to_s.to_time(:local) returns 2012-03-20 14:39:03 +0100

/ UPDATE

> Time.zone.now.to_s
 => "2012-03-20 12:50:05 +0100" 
> Time.zone.now.to_s.to_time.to_s
 => "2012-03-20 12:50:05 UTC" 
# PROBLEM:
# UTC is +0000, meaning that there is 1 hour diff in the above
> Time.zone.now
 => Tue, 20 Mar 2012 12:51:32 CET +01:00 
> Time.zone.now.to_time
 => Tue, 20 Mar 2012 12:51:32 CET +01:00 
> Time.zone.now.to_json
 => "\"2012-03-20T12:50:36+01:00\"" 
> Time.zone.now.to_json.to_time
 => 2012-03-20 12:50:36 UTC 

我对JSON消息有这个问题。无论如何,我不希望to_time真正改变时间。可以转换为UTC,但它应该相应地调整时间。有人知道这是一个已知问题还是“按设计”?

1 个答案:

答案 0 :(得分:1)

在ActiveSupport中定义的此方法String#to_time采用一个参数form,可以是:utc(默认值)或:local。因此,默认情况下,它始终返回UTC时间。

获得时区时间:

Time.zone.parse("2012-03-20T12:50:36+01:00")