Rails:为什么时间数据类型从1/1/2000开始

时间:2017-03-01 17:42:03

标签: ruby-on-rails ruby activerecord rails-activerecord

我有一个专栏,我只想存储时间(小时,分钟,秒)。例如,这是一次迁移:

add_column :products, :start_hour, :time

当我插入数据库start_hour时,始终以1/1/2000开头,例如:2000-01-01 01:19:00 +0700。请解释一下原因。

2 个答案:

答案 0 :(得分:2)

Ruby或Rails中没有时间类,因此ActiveRecord使用datetime / timestamp类表示time列。

如果您在没有任何ActiveRecord,Rails或Ruby噪声的情况下查看数据库内部,您将看到HH:MM:SS时间值。但是当ActiveRecord从数据库中提取time时,它会将日期组件设置为2000-01-01,因为日期时间必须有一个日期而AR会选择该日期。

每次使用Ruby中的start_hour时,您都必须忽略日期组件。

答案 1 :(得分:-1)

存储在数据库中的格式之间的差异与Rails无关,而与数据库有关。日期或时间格式仅有效且无效。在您的应用程序内,而不是在数据库中 - 更简单地说,它们只负责时间对象向用户显示的方式,并且不会影响数据的存储方式。最好的办法是将记录保存为时间对象,然后使用rails帮助程序以有意义的方式向用户显示数据,使用strptime等方法。