将时间字符串转换为特定的时区

我在Debian上使用Rails 3.2和ruby 1.9.3。 我有一个应用程序通过HTML表单以字符串的形式收集日期,时间和时区。 像这样的东西:

start_date: "04-15-2010",
start_time: "10:00:00",
timezone: "Central Time (US & Canada)"

我想要做的就是将这3个元素解析为一个日期,并以UTC的形式保存到我的数据库中,在这种情况下,一旦它在UTC时区内,开始时间就会增加7个小时。 因此,一旦它存储在数据库中,存储时间将为17:00,而不是接收的中央时间。

我试过这样的解析日期:

ActiveSupport::TimeZone[timezone].at DateTime.strptime("{ 2012-04-09 20:00:00 }", "{ %Y-%m-%d %H:%M:%S }").to_i

但是,我无法将时区与%Z结合到结果时间中。 它要么不解析,要么时间解释为UTC不是中心时间。 所以我的问题是,如何在不改变实际存储的日期/时间值的情况下强制日期字符串进入某个时区。 我希望能够将字符串解析为包含当时正确时区的日期/时间对象,以便将来时区转换准确无误。 我已经找遍了,找不到办法做到这一点。 这很奇怪,因为这看起来像是从HTML表单输入的日期常见的东西。 感谢您的任何帮助。


%Z是指定时区名称的正确方法。 你尝试过以下吗?

date_and_time = '%m-%d-%Y %H:%M:%S %Z'
DateTime.strptime("04-15-2010 10:00:00 Central Time (US & Canada)",date_and_time)

尝试这个:

zone = "Central Time (US & Canada)"  

ActiveSupport::TimeZone[zone].parse("2013-04-03 17:47:00")

我个人更喜欢使用String#in_time_zone:

>> '22.09.1986 10:30'.in_time_zone('Central Time (US & Canada)')
Mon, 22 Sep 1986 10:30:00 CDT -05:00
链接地址: http://www.djcxy.com/p/40905.html

上一篇: time string into a specific time zone

下一篇: .NET TimeZoneInfo from Olson time zone