在我的开发:Time.zone.parse不正确转换
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
我怎样才能使它不忽略时区?
在我的开发:Time.zone.parse不正确转换
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
我怎样才能使它不忽略时区?
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
hooray,它的工作原理! fyi,在Mongoid里面确实存在一个bug,那就是Javascript字符串日期忽略了他们的时间戳!我必须在我的控制器中手动将它设置为DateTime.parse,以覆盖javascript日期通过的内容。 – K2xL
@ K2xL您应该报告问题,然后在此处发布链接':)'。 –
摆脱“GMT”位 - 这可能是混淆了解析器:
str = "Sat Jan 12 2013 14:00:00 -0500"
Time.zone.parse(str).utc
它怎么不会混淆开发模式的解析器? – K2xL
我的猜测是你的发展机器有不同的时间表设置生产。即它设置为使用当地时区,而不是UTC或反之亦然 –
输出是否正确?它和prod输出有什么区别?第一个产出是否发展? –
@AndrewMarshall,生产系统忽略该字符串已包含TZ信息。 – PinnyM