java中的時間對象
java.util.Date;
System.currentTimeMillis();
java.util.Calendar;
java.text.SimpleDateFormat;
mysql中的時間數(shù)據(jù)類型
DATE
Time
Datetime
Timestamp
year
timestamp vs datetime
TIMESTAMP
值范圍從1970-01-01 00:00:01 UTC
到2038-01-19 03:14:07 UTC
卿吐。 如果要存儲超過2038的時間值,則應(yīng)使用DATETIME而不是TIMESTAMP但狭。
默認(rèn)情況下旬渠,DATETIME
的值范圍為1000-01-01 00:00:00
至9999-12-31 23:59:59
。
MySQL將TIMESTAMP存儲在UTC(有時區(qū))值中闲延。 但是痊剖,MySQL存儲DATETIME值是沒有時區(qū)的。
也就是說垒玲,datetime插入的時候是什么值陆馁,不管放在哪個時區(qū),最初插入的值都不會改變合愈。
但是叮贩,對于timestamp 插入的值,會跟著時區(qū)改變的佛析。
舉例子:
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數(shù)據(jù)類型的數(shù)據(jù)查詢出來益老,改變了。
注意
https://dev.mysql.com/doc/refman/5.6/en/time-zone-support.html
1.默認(rèn)使用當(dāng)?shù)貢r區(qū)的
2.改變時區(qū)SET time_zone='+03:00'; 僅在當(dāng)前連接有效的寸莫。
set time_zone="+06:00";
僅在一個session中有效捺萌。
會受到影響的有:
now()
curtime()
timestamp數(shù)據(jù)類型的數(shù)據(jù)
不會受到影響的有:
utc_timestamp()
date,time,datetime數(shù)據(jù)類型的數(shù)據(jù)。
timestamp列以utc為單位存儲日期和時間值
TIMESTAMP列以UTC為單位存儲日期和時間值膘茎,根據(jù)新時區(qū)調(diào)整TIMESTAMP列的值桃纯。
這意味著如果使用TIMESTAMP數(shù)據(jù)來存儲日期和時間值,則在將數(shù)據(jù)庫移動到位于不同時區(qū)的服務(wù)器時時間的值可能不一樣披坏,所以應(yīng)該認(rèn)真考慮這個問題态坦。