为什么Rails总是将日期时间显示为1/1/2000 – 具有正确的时间

这个让我疯了! 数据正确存储到db(sqlite3)中。 但是,当我从记录中显示日期时,Rails似乎强制它到1/1/2000 – 正确的时间。 换句话说,如果我将此指定为日期时间:2009年12月31日下午6:00,sqllite3实际上将显示2009-12-31 18:00:00。 但是…… Rails会显示该值已于2000年1月1日06:00 PM(保持正确的时间)。

我创建了虚拟属性来处理日期格式(看起来工作正常)。 而且,我已将时区设置为:

config.time_zone = 'Eastern Time (US & Canada)' 

我不得不相信这很简单……这让我疯狂!

谢谢!

约翰

我有同样的问题,使用postgres,并感谢user145110建议使用DateTime类而不是Time。 这对我有用。 我只想补充一点,虽然我不得不改变我的迁移使用DateTime,但我仍然可以在测试中使用Time及其方法,与DateTime值进行比较。 换句话说,通过这个原始迁移:

 t.time :start_time 

…和使用时间的样本分配:

 start_time = Time.now.beginning_of_day 

…它保存好了,但是稍后阅读时,这一年变成了2000年。也许这是一个旧的Y2K错误。 大声笑。 相反,我只是改变了迁移:

 t.datetime :start_time 

..我的所有代码都有效。 即使是这样的作业:

 start_time = Time.zone.now.beginning_of_year.beginning_of_day 

我不禁感到我错过了什么。 其他人是否使用Time来操纵日期?

嗯……我发现了问题。 事实certificate,当rails创建表时,它使用Time数据类型。 虽然日期时间值的日期部分将存储在时间字段中,但看起来在读取时间字段时,rails仅考虑时间部分。

修复..在绝望中,我将列修改为datetime类型。 修好了。

约翰

我也有这个问题。 要添加有关该问题的一些信息: – 在调试标记(<%=调试对象%>)中,时间和日期是正确的,但在没有调试(<%= object.year%>)的情况下使用时,年份是2000。

人们可以期待两件事之一:

  • 属性:时间只有时间(小时,分钟,秒等),并期望在数据库中看到该信息(没有日期(年,月和日))

XOR

  • attribute:time有时间和日期,并且该信息将转到数据库(包括转换为对象)。

实际上,rails选择了两个选项。 恕我直言,这是一个错误。 我对么? 或者我没有看到导轨设计的某些方面?