0

在我的开发中:

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

我怎样才能让它不忽略时区?

4

2 回答 2

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
于 2013-01-14T04:19:39.960 回答
0

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

str = "Sat Jan 12 2013 14:00:00 -0500"
Time.zone.parse(str).utc
于 2013-01-14T01:04:10.540 回答