在Ruby Rails中,日期时间、时间戳、时间和日期之间有什么区别?

In Ruby on Rails, what's the difference between DateTime, Timestamp, Time and Date?

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

Ruby和Rails在这一点上总是避开我,即使仅仅是因为有大量的选择;我从来都不知道该选哪一个。

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

:datetime, :timestamp, :time, and :date

不知道有什么区别,也不知道哥特人潜伏在哪里。

有什么区别?你用它们做什么?

(P.S.我用的是铁轨3)


ActiveRecord中不同日期/时间格式之间的差异与Rails和您使用的任何数据库都没有什么关系。

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

所以,你问,有什么区别?嗯,其中有些是不言自明的。DATE只存储一个日期,TIME只存储一天中的某个时间,而DATETIME同时存储这两个时间。

DATETIMETIMESTAMP之间的区别更为微妙:DATETIME的格式是YYYY-MM-DD HH:MM:SS。有效范围从1000年到9999年(以及两者之间的所有范围)。当您从数据库中获取TIMESTAMP时,它看起来很相似,但它实际上只是Unix时间戳的前端。有效范围从1970年到2038年。除了数据库引擎中的各种内置函数外,这里的区别在于存储空间。因为DATETIME存储了年、月、日、小时、分钟和秒中的每个数字,所以它总共占用了8个字节。由于TIMESTAMP只存储1970-01-01以来的秒数,所以它使用4个字节。

您可以在这里了解更多关于MySQL中时间格式之间的差异。

最后,归根结底,你需要你的日期/时间栏来做什么。您需要存储1970年之前或2038年之后的日期和时间吗?使用DATETIME。您是否需要担心数据库的大小,并且您在该时间范围内?使用TIMESTAMP。你只需要储存一个日期吗?使用DATE。你只需要储存时间吗?使用TIME

说了所有这些之后,Rails实际上为您做出了一些决定。:timestamp:datetime都将默认为DATETIME,而:date:time分别对应于DATETIME

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


  • :日期时间(8字节)

    • 存储日期和时间格式为YYYY-MM-DD hh:mm:ss
    • 适用于出生日期等列
  • :时间戳(4字节)

    • 存储1970-01-01以来的秒数
    • 适用于更新的列,创建的列
  • 日期(3字节)
    • 商店日期
  • 时间(3字节)
    • 存储时间