Date類的概述和方法使用

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點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章