Ruby on rails 在rails中将日期时间字符串转换为UTC

Ruby on rails 在rails中将日期时间字符串转换为UTC,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有这样一个字符串: "2010-01-01 12:30:00" 我需要将其从当前本地时区转换为UTC 我尝试过这个,但它似乎认为字符串已经是UTC "2010-01-01 12:30:00".to_datetime.in_time_zone("Central Time (US & Canada)") => Fri, 01 Jan 2010 06:30:00 CST -06:00 我不知道从这里到哪里去 从我的评论中添加了以下内容: >> Time.zone = "

我有这样一个字符串:

"2010-01-01 12:30:00"
我需要将其从当前本地时区转换为UTC

我尝试过这个,但它似乎认为字符串已经是UTC

"2010-01-01 12:30:00".to_datetime.in_time_zone("Central Time (US & Canada)")
=> Fri, 01 Jan 2010 06:30:00 CST -06:00
我不知道从这里到哪里去

从我的评论中添加了以下内容:

>> Time.zone = "Pacific Time (US & Canada)"
=> "Pacific Time (US & Canada)"
>> Time.parse("2010-10-27 00:00:00").getutc
=> Wed Oct 27 06:00:00 UTC 2010
>> Time.zone = "Mountain Time (US & Canada)"
=> "Mountain Time (US & Canada)"
>> Time.parse("2010-10-27 00:00:00").getutc
=> Wed Oct 27 06:00:00 UTC 2010
谢谢你的帮助

Time.parse("2010-01-01 12:30:00").getutc
编辑

(想到Ruby/Rails日期/时间处理的噩梦时磨牙)

好的,这个怎么样:

Time.zone.parse("2010-01-01 12:30:00").utc
请注意,
Time.zone.parse
返回一个
DateTime
,而追加
.utc
则提供一个
时间。有差异,所以要小心

此外,Time.zone是Rails(ActiveSupport)的一部分,而不是Ruby。正如您所知。

对于API,您可以使用:

utc_date = Time.parse("2013-05-31 00:00").utc.iso8601 #=> Result will be: 2013-05-30T21:00:00Z
您可以查看以下文章:


    • Rails 4及更高版本中您可以直接使用


      也许我说得太早了。它不会根据config.time\u区域更改时间。我将在上面添加一些代码以供参考。请参阅我的编辑。(添加额外字符以便发布此评论。诸如此类,我是海象等等)这肯定是我很久以来读过的最好的评论。起初它把我弄糊涂了,但现在我明白了,这很好。谢谢你的回答,这很有效。我开始喜欢Rails的日期/时间…第一个版本没有使用zone有什么不对,我完全搞不懂?第一个版本可以工作,但只适用于当前时区(由操作系统定义)。OP希望每个请求都位于不同的时区,为此,我们必须使用Rails TimeWithZone库,它混合到Ruby的时间库中。调用
      Time.zone
      将操作的时区设置为通过设置
      Time.zone=“some zone”
      指定的时区
      Time.zone.parse
      在“某个区域”中构建DateTime对象<代码>utc
将结果转换为utc时区。这允许传入的web请求指定一个本地时间,但将其作为UTC存储在数据库中。不会向问题上下文添加太多内容,但也可以使用
时间戳。在时区(“UTC”)
,然后在时区(“欧洲/雅典”)中添加
时间戳。
"2010-01-01 12:30:00".in_time_zone
#=> Fri, 01 Jan 2010 12:30:00 EST -05:00

"2010-01-01 12:30:00".in_time_zone.utc
#=> 2010-01-01 17:30:00 UTC