我正在使用一个 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'
它最终为空(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。这比它应该的更难。