我在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个小时.

我try 过这样的方法来解析日期:

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)

Ruby-on-rails相关问答推荐

使用FactoryBot测试ActiveStorage的RSpec请求规范

多对多模型通过控制台创建记录不起作用

为什么 Rails 执行器不能识别内核的改进?

只允许用户在 Rails 中输入字母和数字

Rspec期望()与期望{}

如何在 Ruby on Rails 中正确存储 BigDecimal

Restful Rails 编辑与更新

NameError:未定义的局部变量或方法记录器

将日期时间转换为月、日和年?

有没有一种简单的方法可以让 pow 为 https 服务?

如何在 Ruby on Rails 中创建一个锚点并重定向到这个特定的锚点

Rails:如何小写非英文字符串?

如何避免 RSpec 3.0 中 stub_chain 的弃用警告?

使用 RSpec 2 关闭一个规范的事务性固定装置

遇到在早期版本的 Rails 中使用 attr_accessible 的情况时,Rails 4 中的禁止属性错误

如何对这个哈希数组进行分组?

如何在rails中正确使用单选按钮?

Rails:在 link_to 中保留 GET 查询字符串参数

Rails 在 id 字段上重置种子的方法

如何在 Ruby 类/模块命名空间中翻译模型?