根据我的经验,在编程时获得正确的日期/时间总是充满危险和困难。
Ruby 和 Rails 在这方面一直让我困惑,只是因为有太多的选择;我从来不知道我应该选择哪个。
当我使用 Rails 并查看 ActiveRecord 数据类型时,我可以找到以下内容
:日期时间、:时间戳、:时间和:日期
并且不知道差异是什么或陷阱潜伏在哪里。
有什么不同?你用它们做什么?
(P.S.我使用的是Rails3)
ActiveRecord 中不同日期/时间格式之间的差异与 Rails 关系不大,而与您使用的任何数据库有关。
以 MySQL 为例(如果没有其他原因,因为它是最流行的),你有DATE
, DATETIME
, TIME
and TIMESTAMP
列数据类型;就像你一样CHAR
, VARCHAR
, FLOAT
and INTEGER
.
那么,你问,有什么区别?嗯,其中一些是不言自明的。DATE
只存储日期,TIME
只存储一天中的某个时间,而DATETIME
两者都存储。
和...之间的不同DATETIME
and TIMESTAMP
有点微妙:DATETIME
格式为YYYY-MM-DD HH:MM:SS
。有效范围从 1000 年到 9999 年(以及之间的所有内容)。TIMESTAMP
looks类似,当你从数据库中获取它时,它实际上只是一个前面Unix 时间戳 http://en.wikipedia.org/wiki/Unix_time。它的有效范围是从1970年到2038年。这里的区别除了数据库引擎内的各种内置功能之外,还在于存储空间。因为DATETIME
存储年、月、日、时、分、秒的每一位数字,总共占用8个字节。作为TIMESTAMP
仅存储自 1970-01-01 以来的秒数,它使用 4 个字节。
您可以阅读更多有关 MySQL 中时间格式之间的差异的信息here http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html.
最后,这取决于您需要日期/时间列执行的操作:
- 您需要存储 1970 年之前或 2038 年之后的日期和时间吗? => 使用
DATETIME
.
- 您是否需要担心数据库大小并且您在该时间范围内? => 使用
TIMESTAMP
.
- 您只需要存储日期吗? => 使用
DATE
.
- 你只需要存储一个时间吗? => 使用
TIME
.
说了这么多,Rails 实际上为您做出了其中一些决定. Both :timestamp
and :datetime
将默认为DATETIME
, while :date
and :time
对应于DATE
and TIME
, 分别。
这意味着在 Rails 中,您只需决定是否需要存储日期、时间或两者都存储。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)