根据我的经验,在编程时获得正确的日期/时间总是充满危险和困难 .
如果仅仅由于绝大多数的选择,Ruby和Rails总是在这个问题上找不到我;我从来不知道应该选哪个 .
当我使用Rails并查看ActiveRecord数据类型时,我可以找到以下内容
:datetime,:timestamp,:time和:date
并且不知道差异是什么或者潜伏在哪里 .
有什么不同?你用它们做什么的?
(P.S.我正在使用Rails3)
ActiveRecord中不同日期/时间格式之间的差异与Rails几乎没有关系,而且与您正在使用的任何数据库有关 .
以MySQL为例(如果没有其他原因,因为它最受欢迎),你有 DATE , DATETIME , TIME 和 TIMESTAMP 列数据类型;就像你有 CHAR , VARCHAR , FLOAT 和 INTEGER 一样 .
DATE
DATETIME
TIME
TIMESTAMP
CHAR
VARCHAR
FLOAT
INTEGER
所以,你问,有什么区别?好吧,其中一些是不言自明的 . DATE 仅存储日期, TIME 仅存储一天中的某个时间,而 DATETIME 存储两者 .
DATETIME 和 TIMESTAMP 之间的区别有点微妙: DATETIME 的格式为 YYYY-MM-DD HH:MM:SS . 有效范围从1000年到9999年(以及介于两者之间的所有内容 . 当 TIMESTAMP 从数据库中获取时看起来相似,它实际上只是unix timestamp的前沿 . 它的有效范围从1970年到2038年 . 差异这里,除了数据库引擎中的各种内置函数之外,还有存储空间 . 因为 DATETIME 存储了年,月,日,时,分和秒中的每个数字,所以它总共消耗了8个字节 . 仅 TIMESTAMP 只存储自1970-01-01以来的秒数,它使用4个字节 .
YYYY-MM-DD HH:MM:SS
您可以在MySQL here中阅读有关时间格式之间差异的更多信息 .
最后,它归结为您需要的日期/时间列 . 您需要在1970年之前或2038年之后存储日期和时间吗?使用 DATETIME . 您是否需要担心数据库大小并且您在该时间范围内?使用 TIMESTAMP . 你只需要存储日期吗?使用 DATE . 你只需要存储时间吗?使用 TIME .
说完这一切之后, Rails actually makes some of these decisions for you . :timestamp 和 :datetime 都将默认为 DATETIME ,而 :date 和 :time 分别对应于 DATE 和 TIME .
:timestamp
:datetime
:date
:time
这意味着在Rails中,您只需要决定是否需要存储日期,时间或两者 .
:datetime(8字节)
存储日期和时间格式化YYYY-MM-DD HH:MM:SS
对于像birth_date这样的列很有用
:时间戳(4个字节)
存储自1970-01-01以来的秒数
对updated_at,created_at等列有用
:日期(3个字节)
商店日期
:时间(3个字节)
存储时间
2 回答
ActiveRecord中不同日期/时间格式之间的差异与Rails几乎没有关系,而且与您正在使用的任何数据库有关 .
以MySQL为例(如果没有其他原因,因为它最受欢迎),你有
DATE
,DATETIME
,TIME
和TIMESTAMP
列数据类型;就像你有CHAR
,VARCHAR
,FLOAT
和INTEGER
一样 .所以,你问,有什么区别?好吧,其中一些是不言自明的 .
DATE
仅存储日期,TIME
仅存储一天中的某个时间,而DATETIME
存储两者 .DATETIME
和TIMESTAMP
之间的区别有点微妙: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
分别对应于DATE
和TIME
.这意味着在Rails中,您只需要决定是否需要存储日期,时间或两者 .
:datetime(8字节)
存储日期和时间格式化YYYY-MM-DD HH:MM:SS
对于像birth_date这样的列很有用
:时间戳(4个字节)
存储自1970-01-01以来的秒数
对updated_at,created_at等列有用
:日期(3个字节)
商店日期
:时间(3个字节)
存储时间