在Ruby on Rails中,DateTime、Timestamp、Time和Date有什么区别?

34 浏览
0 Comments

在Ruby on Rails中,DateTime、Timestamp、Time和Date有什么区别?

在我个人的经验中,编写程序时确保时间/日期正确是一项充满危险和难度的任务。

对于 Ruby 和 Rails,我一直感到困惑,因为它们提供了数量庞大的选项;我从来不知道应该选择哪一个。

当我在使用 Rails 并查看 ActiveRecord 数据类型时,我能发现以下内容:

- :datetime

- :timestamp

- :time

- :date

但我不知道它们之间的区别或者要注意哪些地方。

它们之间有什么区别?你用它们来干什么?

(附注:我正在使用 Rails3)

admin 更改状态以发布 2023年5月21日
0
0 Comments
  1. :datetime (8个字节)

    • 存储格式为YYYY-MM-DD HH:MM:SS的日期和时间
    • 对于类似birth_date的列非常有用
  2. :timestamp (4个字节)

    • 存储自1970-01-01以来的秒数
    • 对于类似updated_at、created_at的列非常有用
  3. :date (3个字节)
    • 存储日期
  4. :time (3个字节)
    • 存储时间
0
0 Comments

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实际上为您做出了一些决定:时间戳:日期时间 默认为 DATETIME,而 :日期:时间 分别对应于 DATETIME
这意味着在Rails中,您只需要决定是否需要存储日期、时间或两者都需要。

0