我从未明确设置其时区的API获取日期时间字段。当我将它放入数据库时,假设日期时间必须是GMT,但时区实际上是芝加哥时间。 (我说芝加哥时间,因为我仍然不确定这个API是否会影响DST。)在将此时间转换为GMT之前,将其添加到数据库之前,最好的方法是什么?
以下是我所指的其中一个节点的XML示例:
<FromDateTime>2011-03-17 08:00:00</FromDateTime>
在Ruby中,我使用它将此记录添加到数据库中。
:starttime => DateTime.parse(row.at_xpath("FromDateTime/text()").to_s),
我认为我需要做的是将CST和GMT之间的小时差异添加到最后一次Ruby调用中,对吗?我该怎么做?
谢谢!
答案 0 :(得分:2)
你能用时间吗? DateTime不支持夏令时。时间自动设置为给定日期/时间的本地GMT偏移量,并根据需要设置DST。
irb(main):014:0> require 'time'
irb(main):015:0> Time.parse('2011-03-17 08:00:00')
=> Thu Mar 17 08:00:00 -0400 2011
irb(main):022:0> Time.parse('2011-03-17 08:00:00').dst?
=> true
以下是标准时间(我在美国东部时间)的情况
irb(main):025:0> Time.parse('2011-01-17 08:00:00')
=> Mon Jan 17 08:00:00 -0500 2011
irb(main):023:0> Time.parse('2011-01-17 08:00:00').dst?
=> false
如果您使用的是ActiveSupport http://api.rubyonrails.org/classes/DateTime.html,则可以设置为任意时区:
irb(main):039:0> Time.zone = 'America/Chicago'
=> "America/Chicago"
irb(main):040:0> Time.parse('2011-03-17 08:00:00')
=> Thu Mar 17 08:00:00 -0400 2011