我正在使用Debian上的Rails 3.2和ruby 1.9.3。我有一个应用程序,通过HTML表单以字符串的形式收集日期、时间和时区。类似这样:
start_date: "04-15-2010",
start_time: "10:00:00",
timezone: "Central Time (US & Canada)"
我想做的是将这三个元素解析为一个日期,保存到我的数据库中,并保存为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
然而,我无法使用%Z将时区合并到结果时间中。 它要么不能解析,要么将时间解释为UTC而不是美国中部时间。 因此,我的问题是,如何将日期字符串强制转换为特定的时区,而不更改实际存储的日期/时间值。 我想能够将字符串解析为带有正确时区的日期/时间对象,并在那个时间点保留它,以便未来的时区转换是准确的。 我已经四处寻找,但找不到这样做的方法。 这很奇怪,因为这似乎是从HTML表单输入的日期常见的操作。 谢谢任何帮助。
ActiveSupport::TimeZone
的实例,那么您可以在其上调用.strptime(str, format)
来解析给定格式的日期字符串。 - Alan Heywood