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

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

add_column :products, :start_hour, :time 

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

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

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

每当你在Ruby中使用start_hour ,你都必须忽略日期组件。

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