Date, DateTime timestamp 区别

我们在平时开发中不可避免的就是要存储时间,比如我们要记录操作表中每一条记录的时间,记录转账的交易时间、记录出发时间等等。这个东西与我们开发联系非常密切,用的好与不好会给我们的业务甚至功能带来很大的影响。

格式:

Date: yyyy-mm-dd
Datetime: yyyy-mm-dd hh:mm:ss
Timestamp: yyyy-mm-dd hh:mm:ss

范围:

Date: 1000-01-01 ~ 9999-12-31
Datetime: 1000-01-01 00:00:00..000000 ~ 9999-12-31 23:59:59.999999
Timestamp: 1970-01-01 00:00:01..000000 ~ 2038-01-19 03:14:07.999999

占用空间:

Date: 3字节
Datetime: 8字节
Timestamp: 4字节

时区性:

DateTime类型没有时区信息的(时区无关)
DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。这样就会有什么问题呢?当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导致你从数据库中读出的时间错误。不要小看这个问题,很多系统就是因为这个问题闹出了很多笑话。

Timestamp和时区有关
Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。
但也会带来一个新的问题
如果你存储了TIMESTAMP的值,然后更改了时区并且从数据库取回这个值,这个被取回的值跟你存储的值是不一样的。这个发生的原因是用的不是相同的时区用了相同的转变的方式。当前时区是可以根据当前时区的系统变量获取的。

最后介绍一种时间戳的时间表示方法:
时间戳的定义是从一个基准时间开始算起,这个基准时间是「1970-1-1 00:00:00 +0:00」,从这个时间开始,用整数表示,以秒计时,随着时间的流逝这个时间整数不断增加。这样一来,我只需要一个数值,就可以完美地表示时间了,而且这个数值是一个绝对数值,即无论的身处地球的任何角落,这个表示时间的时间戳,都是一样的,生成的数值都是一样的,并且没有时区的概念,所以在系统的中时间的传输中,都不需要进行额外的转换了,只有在显示给用户的时候,才转换为字符串格式的本地时间。
时间转时间戳:

image.png

时间戳转时间:
image.png

你可能感兴趣的:(Date, DateTime timestamp 区别)