将时间字符串转换为特定的时区
我在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