如何让Ruby解析时间,好像它处于不同的时区?

时间:2010-11-24 00:54:34

标签: ruby timezone

我正在解析这样的事情:

11/23/10 23:29:57

没有与之相关的时区,但我知道它在UTC时区(虽然我不是)。我怎样才能让Ruby解析它,就像它在UTC时区一样?

7 个答案:

答案 0 :(得分:42)

您可以在解析之前将UTC时区名称附加到字符串:

require 'time'
s = "11/23/10 23:29:57"
Time.parse(s) # => Tue Nov 23 23:29:57 -0800 2010
s += " UTC"
Time.parse(s) # => Tue Nov 23 23:29:57 UTC 2010

答案 1 :(得分:20)

如果你使用rails,你可以使用ActiveSupport::TimeZone助手

current_timezone = Time.zone
Time.zone = "UTC"
Time.zone.parse("Tue Nov 23 23:29:57 2010") # => Tue, 23 Nov 2010 23:29:57 UTC +00:00
Time.zone = current_timezone

它的设计目的是根据用户时区在请求开头设置时区。

所有内容都需要Time.zone,因此Time.parse仍会解析为服务器时区。

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

注意:您上面的时间格式不再有效,因此我更改为支持的格式。

答案 2 :(得分:4)

没有Time.zone设置/未设置

的@Pete Brumm回答
Time.zone.parse("Tue Nov 23 23:29:57 2010") + Time.zone.utc_offset

答案 3 :(得分:3)

如果您正在使用ActiveSupport [来自Rails,例如],您可以这样做:

ActiveSupport::TimeZone["GMT"].parse("..... date string")

答案 4 :(得分:2)

来自https://rubyinrails.com/2018/05/30/rails-parse-date-time-string-in-utc-zone/的信用额

Time.find_zone("UTC").parse(datetime)
# => Wed, 30 May 2018 18:00:00 UTC +05:30

答案 5 :(得分:1)

没有 rails 依赖项:Time 以本地时间解析,但 DateTime 以 UTC 解析。然后你可以将它转换为 Time 类,如果这是你想要的:

require 'date'

DateTime.parse(string_to_parse).to_time

答案 6 :(得分:0)

如果您不希望/不需要加载ActiveSupport,则可以使用另一种纯Ruby(无Rails)解决方案。

android:fitsSystemWindows="true"