关于时区:如何让Ruby像在其他时区一样分析时间?

How do I get Ruby to parse time as if it were in a different time zone?

我正在分析如下内容:

1
11/23/10 23:29:57

它没有与之相关的时区,但我知道它在UTC时区(而我没有)。我怎样才能让Ruby像在UTC时区一样分析它呢?


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

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


如果您使用的是Rails,则可以使用ActiveSupport::TimeZone助手

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

注意:上面的时间格式不再有效,所以我改为支持的格式。


如果您使用的是ActiveSupport[来自Rails,例如],则可以执行以下操作:

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

在没有设置/取消设置时区的情况下对@pete brumm的答案进行校准。

1
Time.zone.parse("Tue Nov 23 23:29:57 2010") + Time.zone.utc_offset