java中的时间对象
java.util.Date;
System.currentTimeMillis();
java.util.Calendar;
java.text.SimpleDateFormat;
Java中获取指定日为星期几及其他日期操作
mysql中的时间数据类型
DATE
Time
Datetime
Timestamp
year
timestamp vs datetime
TIMESTAMP
值范围从1970-01-01 00:00:01 UTC
到2038-01-19 03:14:07 UTC
。 如果要存储超过2038的时间值,则应使用DATETIME而不是TIMESTAMP。
默认情况下,DATETIME
的值范围为1000-01-01 00:00:00
至9999-12-31 23:59:59
。
MySQL将TIMESTAMP存储在UTC(有时区)值中。 但是,MySQL存储DATETIME值是没有时区的。
也就是说,datetime插入的时候是什么值,不管放在哪个时区,最初插入的值都不会改变。
但是,对于timestamp 插入的值,会跟着时区改变的。
举例子:
CREATE TABLE timestamp_n_datetime (
id INT AUTO_INCREMENT PRIMARY KEY,
ts TIMESTAMP,
dt DATETIME
);
SET time_zone='+08:00';
INSERT INTO timestamp_n_datetime(ts,dt)
VALUES(NOW(),NOW());
SELECT ts,dt FROM timestamp_n_datetime;
ts | dt |
---|---|
2018-10-30 23:03:43 | 2018-10-30 23:03:43 |
SET time_zone='+03:00';
SELECT ts,dt FROM timestamp_n_datetime;
ts | dt |
---|---|
2018-10-30 18:03:43 | 2018-10-30 23:03:43 |
timestamp数据类型的数据查询出来,改变了。
注意
https://dev.mysql.com/doc/refman/5.6/en/time-zone-support.html
1.默认使用当地时区的
2.改变时区SET time_zone='+03:00'; 仅在当前连接有效的。
set time_zone="+06:00";
仅在一个session中有效。
会受到影响的有:
now()
curtime()
timestamp数据类型的数据
不会受到影响的有:
utc_timestamp()
date,time,datetime数据类型的数据。
timestamp列以utc为单位存储日期和时间值
TIMESTAMP列以UTC为单位存储日期和时间值,根据新时区调整TIMESTAMP列的值。
这意味着如果使用TIMESTAMP数据来存储日期和时间值,则在将数据库移动到位于不同时区的服务器时时间的值可能不一样,所以应该认真考虑这个问题。