为传入的xml数据设置时区

时间:2011-02-23 16:44:50

标签: ruby-on-rails ruby datetime

我从未明确设置其时区的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调用中,对吗?我该怎么做?

谢谢!

1 个答案:

答案 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