关于ruby:在rails中将DateTime字符串转换为UTC

Convert DateTime String to UTC in rails

我有一个像这样的字符串:

1
"2010-01-01 12:30:00"

我需要从当前本地时区转换为UTC。

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

1
2
"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

我不知道从哪里开始。

从我的评论中添加了这个:

1
2
3
4
5
6
7
8
>> 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

谢谢你的帮助。


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

编辑

(在考虑噩梦时磨牙,这是Ruby / Rails日期/时间处理)

好的,这个怎么样:

1
Time.zone.parse("2010-01-01 12:30:00").utc

请注意,Time.zone.parse返回DateTime,而附加.utc会返回Time。 有差异,所以要小心。

此外,Time.zone是Rails(ActiveSupport)的一部分,而不是Ruby。 你知道吗


在Rails 4及更高版本中,您可以直接使用in_time_zone

1
2
3
4
5
"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


对于API,您可以使用:

1
utc_date = Time.parse("2013-05-31 00:00").utc.iso8601 #=> Result will be: 2013-05-30T21:00:00Z

你可以查看这些文章:

  • 在Ruby on Rails中使用时区
  • ISO8601 - Ruby中的日期