首页 文章

在Ruby on Rails中,DateTime,Timestamp,Time和Date之间的区别是什么?

提问于
浏览
377

根据我的经验,在编程时获得正确的日期/时间总是充满危险和困难 .

如果仅仅由于绝大多数的选择,Ruby和Rails总是在这个问题上找不到我;我从来不知道应该选哪个 .

当我使用Rails并查看ActiveRecord数据类型时,我可以找到以下内容

:datetime,:timestamp,:time和:date

并且不知道差异是什么或者潜伏在哪里 .

有什么不同?你用它们做什么的?

(P.S.我正在使用Rails3)

2 回答

  • 529

    ActiveRecord中不同日期/时间格式之间的差异与Rails几乎没有关系,而且与您正在使用的任何数据库有关 .

    以MySQL为例(如果没有其他原因,因为它最受欢迎),你有 DATEDATETIMETIMETIMESTAMP 列数据类型;就像你有 CHARVARCHARFLOATINTEGER 一样 .

    所以,你问,有什么区别?好吧,其中一些是不言自明的 . DATE 仅存储日期, TIME 仅存储一天中的某个时间,而 DATETIME 存储两者 .

    DATETIMETIMESTAMP 之间的区别有点微妙: DATETIME 的格式为 YYYY-MM-DD HH:MM:SS . 有效范围从1000年到9999年(以及介于两者之间的所有内容 . 当 TIMESTAMP 从数据库中获取时看起来相似,它实际上只是unix timestamp的前沿 . 它的有效范围从1970年到2038年 . 差异这里,除了数据库引擎中的各种内置函数之外,还有存储空间 . 因为 DATETIME 存储了年,月,日,时,分和秒中的每个数字,所以它总共消耗了8个字节 . 仅 TIMESTAMP 只存储自1970-01-01以来的秒数,它使用4个字节 .

    您可以在MySQL here中阅读有关时间格式之间差异的更多信息 .

    最后,它归结为您需要的日期/时间列 . 您需要在1970年之前或2038年之后存储日期和时间吗?使用 DATETIME . 您是否需要担心数据库大小并且您在该时间范围内?使用 TIMESTAMP . 你只需要存储日期吗?使用 DATE . 你只需要存储时间吗?使用 TIME .

    说完这一切之后, Rails actually makes some of these decisions for you . :timestamp:datetime 都将默认为 DATETIME ,而 :date:time 分别对应于 DATETIME .

    这意味着在Rails中,您只需要决定是否需要存储日期,时间或两者 .

  • 6
    • :datetime(8字节)

    • 存储日期和时间格式化YYYY-MM-DD HH:MM:SS

    • 对于像birth_date这样的列很有用

    • :时间戳(4个字节)

    • 存储自1970-01-01以来的秒数

    • 对updated_at,created_at等列有用

    • :日期(3个字节)

    • 商店日期

    • :时间(3个字节)

    • 存储时间

相关问题