Date類的概述和方法使用
- A:Date類的概述是util包下的,不能導入sql包的
- 類 Date 表示特定的瞬間,精確到毫秒。
- B:構造方法
- public Date()
- public Date(long date)
- C:成員方法
- public long getTime()
- public void setTime(long time)
package com.heima.otherclass;
import java.util.Date;
public class Demo06_Date {
public static void main(String[] args) {
//Demo01();
//Demo02();
Date d1 = new Date();
d1.setTime(1000); //設置毫秒值,改變時間對象
//Thu Jan 01 08:00:01 CST 1970
System.out.println(d1);
}
public static void Demo02() {
Date d1 = new Date();
System.out.println(d1.getTime()); //通過時間對象獲取毫秒值
System.out.println(System.currentTimeMillis()); //通過系統類的方法獲取當前時間毫秒值
}
public static void Demo01() {
Date d1 = new Date(); //如果沒有傳參代表的是當前時間
//Sun Apr 21 19:51:20 CST 2019
System.out.println(d1);
Date d2 = new Date(0); //如果構造方法中參數傳爲0代表的是1970年1月1日
//Thu Jan 01 08:00:00 CST 1970 //通過毫秒值創建時間對象
System.out.println(d2);
}
}
有關1970年01月01日00:00:00
1969年8月,貝爾實驗室的程序員肯湯普遜利用妻兒離開一個月的機會,開始着手創造一個全新的革命性的操作系統,他使用B編譯語言在老舊的PDP-7機器上開發出了Unix的一個版本。隨後,湯普遜和同事丹尼斯里奇改進了B語言,開發出了C語言,重寫了UNIX,新版於1971年發佈。
1970年1月1日 算 UNIX 和 C語言 生日。
最初計算機操作系統是32 位,而時間也是用 32 位表示。
System.out.println(Integer.MAX_VALUE);
2147483647
Integer在 JAVA 內用 32 位表 示,因此 32 位能表示的最大值是 2147483647。 另外1 年 365 天的總秒數是 31536000,
2147483647/31536000 = 68.1
也就是說32 位能表示的最長時間是 68 年,而實際上到 2038年 01 月 19 日 03 時 14 分 07
秒,便會到達最大時間,過了這個時間點,所 有 32 位操作系統時間便會變 爲
10000000 00000000 00000000 00000000
也就是1901年 12月 13 日 20時 45 分 52 秒,這樣便會出現時間迴歸的現象,很多軟件便會運 行異常了。
到這裏,我想問題的答案已經出來了:
因爲用32 位來表示時間的最大間隔是 68 年,而最早出現的 UNIX 操作系統考慮到計算
機產生的年代和應用的時限綜合取了 1970 年 1 月 1 日作爲 UNIX TIME 的紀元時間 ( 開始
時間 ) ,而 java 自然也遵循了這一約束。
至於時間迴歸的現象相信隨着64 爲操作系統 的產生逐漸得到解決,因爲用 64 位操作
系統可以表示到 292,277,026,596年 12月 4 日 15時 30 分 08 秒,相信我們的 N 代子孫,哪
怕地球毀滅那天都不用愁不夠用了,因爲這個時間已經是千億年以後了。
最後一個問題:上面System.out.println(new Date(0)),打印出來的時間是8點而非0點,
原因是存在系統時間和本地時間的問題,其實系統時間依然是0點,只不過我的電腦時區
設置爲東8區,故打印的結果是8點。