【发布时间】:2012-06-05 09:32:28
【问题描述】:
我正在使用一个 js 日历,它将一个字符串插入一个文本字段以作为日期时间值提交。不确定这是否重要,但我现在正在使用 SQLite。
我将格式设置如下(在初始化程序中):
Time::DATE_FORMATS[:default] = '%m/%d/%Y %H:%M'
Time::DATE_FORMATS[:db] = '%m/%d/%Y %H:%M'
这不起作用,因为 Rails 显然正在使用不同的格式验证日期。
比如我这样设置:
myobject.my_datetime = '06/30/2012 00:00'
它以 null 结束(ActiveRecord 生成的 SQL 查询本身将其设置为 NULL)。如果我将其设置为小于或等于 12 的日期,则日期部分最终正确(但生成的 SQL 查询仍显示该月前一天的字符串,即在上面的示例中,SQL 查询的字符串为 '30 /06/2012 05:00:000000')。
如您所见,即使我将 config.time_zone 设置为东部时间,它似乎也为 UTC(?)增加了 5 小时。
无论从控制台还是通过表单提交,行为都是相同的。
对我缺少什么有什么建议吗?
更新:
当我按照 jdoe 的建议这样做时:
myobject.my_datetime = Time.strptime('06/30/2012 08:00', '%m/%d/%Y %H:%M')
现在生成的查询看起来是正确的(忽略 4 小时的差异):
UPDATE "myjoin_table" SET "my_datetime" = '06/30/2012 04:00.000000' .....
它以这种方式在数据库中结束。
但是当我重新加载对象时,AR 对象中的值被初始化为 nil。
我想我会在我的控制器操作中逐个解析字符串并手动将参数设置为 update_attributes。这比它应该的更难。
【问题讨论】:
标签: ruby-on-rails datetime activerecord