Time.zone.parse无法正确转换

时间:2013-01-14 00:38:14

标签: ruby-on-rails ruby datetime timezone

在我的发展中:

str = "Sat Jan 12 2013 14:00:00 GMT-0500"
Time.zone.parse(str).utc

输出:

2013-01-12 19:00:00 UTC

在我的作品中(appfog):

2013-01-12 14:00:00 UTC

如何让它不要忽略时区?

2 个答案:

答案 0 :(得分:1)

Time.zone.parse正在解释在当前系统时区中传递的时间,将时区信息丢弃在字符串中:

require 'active_support/all'

`date '+%Z %z'`.strip
#=> "EST -0500"
Time.zone = 'MST'
Time.zone.parse('Fri, 31 Dec 1999 14:00:00 HST -10:00')
#=> Fri, 31 Dec 1999 12:00:00 MST -07:00

请注意,解析时间是MST,正如预期的那样,但它已经调整了两个小时 - 这是EST(系统时区)和MST(ActiveSupport的Time.zone)之间的偏移量。这可能是一个错误,因为删除时区“名称”按预期工作:

Time.zone.parse('Fri, 31 Dec 1999 14:00:00 -10:00')
#=> Fri, 31 Dec 1999 17:00:00 MST -07:00

由于你最后只是转换为UTC,你可能只想使用DateTime.parse

DateTime.parse('Fri, 31 Dec 1999 14:00:00 HST -10:00').utc
#=> Sat, 01 Jan 2000 00:00:00 +0000

答案 1 :(得分:0)

摆脱“GMT”位 - 这可能会让解析器感到困惑:

str = "Sat Jan 12 2013 14:00:00 -0500"
Time.zone.parse(str).utc