Mat*_*rtz 36 timezone ruby-on-rails date
我在Debian上使用Rails 3.2和ruby 1.9.3.我有一个应用程序,通过HTML表单以字符串的形式收集日期,时间和时区.像这样的东西:
start_date: "04-15-2010",
start_time: "10:00:00",
timezone: "Central Time (US & Canada)"
Run Code Online (Sandbox Code Playgroud)
我想要做的是将这3个元素解析为一个以UTC格式保存到我的数据库中的日期,在这种情况下,一旦它在UTC时区,就会增加7个小时到开始时间.因此,一旦它在数据库中作为UTC而不是收到的中央时间,存储的时间将是17:00.
我试过这样的东西来解析日期:
ActiveSupport::TimeZone[timezone].at DateTime.strptime("{ 2012-04-09 20:00:00 }", "{ %Y-%m-%d %H:%M:%S }").to_i
Run Code Online (Sandbox Code Playgroud)
但是,我无法将时区合并到%Z的结果时间中.它要么不解析,要么将时间解释为UTC而不是中心时间.所以我的问题是,如何在不改变存储的实际日期/时间值的情况下将日期字符串强制转换为某个时区.我希望能够将字符串解析成包括与它正确的时区的日期/时间对象在那个时候,这样未来的时区转换是准确的.我看了一遍,找不到办法做到这一点.这很奇怪,因为这似乎是从HTML表单输入的日期常见的事情.感谢您的任何帮助.
rya*_*ung 107
试试这个:
zone = "Central Time (US & Canada)"
ActiveSupport::TimeZone[zone].parse("2013-04-03 17:47:00")
Run Code Online (Sandbox Code Playgroud)
Art*_*jev 37
String#in_time_zone(Rails 4+)我个人更喜欢使用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
Run Code Online (Sandbox Code Playgroud)
这会将String中的日期和时间解析为提供的时区.
0x4*_*672 18
%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)
Run Code Online (Sandbox Code Playgroud)