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





(3)


  1. :datetime(8字节)

    • 存储日期和时间格式为YYYY-MM-DD HH:MM:SS
    • 对于像birth_date这样的列很有用
  2. :时间戳(4个字节)

    • 存储自1970-01-01以来的秒数
    • 对像updated_at,created_at这样的列很有用
  3. :日期(3字节)
    • 存储日期
  4. :时间(3个字节)
    • 存储时间

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

如果仅仅是由于绝大多数的选择,Ruby和Rails一直没有提供这方面的信息; 我从来没有任何想法,我应该选择。

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

:datetime,:timestamp,:time和date

并且不知道它们之间的区别是什么或者潜藏在哪里。

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

(PS我正在使用Rails3)




ActiveRecord中不同的日期/时间格式之间的区别与Rails无关,与您使用的任何数据库无关。

使用MySQL作为例子(如果没有其他原因,因为它是最流行的),你有DATEDATETIMETIMETIMESTAMP列数据类型; 就像你有CHARVARCHARFLOATINTEGER

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

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

你可以在here阅读更多关于MySQL中时间格式差异的内容。

最后,它归结为你需要你的日期/时间列做什么。 你需要在1970年之前或2038年之后存储日期和时间吗? 使用DATETIME 。 你需要担心数据库的大小,你在这个时间范围内? 使用TIMESTAMP 。 你只需要存储日期? 使用DATE 。 你只需要存储一个时间? 使用TIME

说完所有这些, Rails实际上为您做出了一些这些决定 。 Both :timestamp:datetime将默认为DATETIME ,而:date:time对应DATETIME

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




我认为这会做你想做的事情:

DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(-1);

TimeSpan t = d1 - d2;
double NrOfDays = t.TotalDays;




ruby-on-rails datetime date time timestamp