【问题标题】:Rails: why time datatype start at 1/1/2000Rails:为什么时间数据类型从 2000 年 1 月 1 日开始
【发布时间】:2017-03-01 17:42:02
【问题描述】:

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

add_column :products, :start_hour, :time

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

【问题讨论】:

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


    【解决方案1】:

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

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

    任何时候您在 Ruby 中使用 start_hour,您都必须忽略日期组件。

    【讨论】:

    • 谢谢。例如,为什么 Rails 选择“2000 年 1 月 1 日”而不是 1970 年的基准时间。这里有什么原因吗。谢谢。
    • 因为大多数 Rails 开发人员在 1970 年都不在世?不过说真的,可能没有什么特别的原因,他们只是需要一个日期,而且 2000-01-01 看起来不错。
    【解决方案2】:

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

    【讨论】:

    • 数据库具有time 数据类型。这意味着时间不仅仅是应用程序数据类型。
    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多