1. 程式人生 > >Java學習日誌14.16(第一階段基礎)

Java學習日誌14.16(第一階段基礎)

2018.11.1 11:06 陰

14.16_常見物件(Date類的概述和方法使用)(掌握)

** * A:Date類的概述
* 類 Date 表示特定的瞬間,精確到毫秒。

  • B:構造方法
    • public Date()
    • 分配 Date 物件並初始化此物件,以表示分配它的時間(精確到毫秒)。
    • public Date(long date)
    • 分配 Date 物件並初始化此物件,
    • 以表示自從標準基準時間(稱為“曆元(epoch)”,
    • 即 1970 年 1 月 1 日 00:00:00 GMT)以來的指定毫秒數。
  • C:成員方法
    • public long getTime()
      返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 物件表示的毫秒數。

    • public void setTime(long time)
      setTime(long time)
      設定此 Date 物件,以表示 1970 年 1 月 1 日 00:00:00 GMT 以後 time 毫秒的時間點。
      拓展: (1)肯湯遜的小故事
      1969年8月,貝爾實驗室的程式設計師肯湯普遜利用妻兒離開一個月的機會,
      開始著手創造一個全新的革命性的作業系統,
      他使用B編譯語言在老舊的PDP-7機器上開發出了Unix的一個版本。
      隨後,湯普遜和同事丹尼斯里奇改進了B語言,開發出了C語言,
      重寫了UNIX,新版於1971年釋出。
      1970年1月1日 算 UNIX 和 C語言 生日。
      最初計算機作業系統是32 位,而時間也是用 32 位表示。
      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 秒

      (2)面System.out.println(new Date(0)),打印出來的時間是8點而非0點,
      原因是存在系統時間和本地時間的問題,其實系統時間依然是0點,只不過我的電腦時區
      設定為東8區,故列印的結果是8點。

package com.heima.otherclass;
import java.util.Date;

public class Demo_Dare {
	public static void main(String[] args) {
		Date d1 = new Date();	//建立物件,儲存當前系統時間
		System.out.println("無引數的時間:");
		System.out.println(d1);
		System.out.println("有引數的時間:");
		Date d2 = new Date(1000);	//引數為毫秒值,顯示從1970年1月1日00:00:00以來的毫秒值
		System.out.println(d2);
		Date d3 = new Date();
		/*long t = d3.getTime();
		System.out.println(t);*/
		System.out.println("從1970.1.1到程式執行時的毫秒值為:");
		System.out.println(d3.getTime());	//獲取從1970.1.1起的毫秒值
		System.out.println();
		d1.setTime(1000);		//設定d1 為1970.1.1+對應引數毫秒值的時間
		System.out.println(d1);
	}
}

程式結果:
無引數的時間:
Thu Nov 01 10:50:36 CST 2018
有引數的時間:
Thu Jan 01 08:00:01 CST 1970
從1970.1.1到程式執行時的毫秒值為:
1541040636981
無引數的時間的Date物件d1被修改後的值為:
Thu Jan 01 08:00:01 CST 1970

14.17_常見物件(SimpleDateFormat類實現日期和字串的相互轉換)(掌握)

** A:DateFormat類的概述
* DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。是抽象類,所以使用其子類SimpleDateFormat(包括了父類所有的方法)

  • B:SimpleDateFormat構造方法
    • public SimpleDateFormat()
    • public SimpleDateFormat(String pattern)
  • C:成員方法
    • public final String format(Date date)
      將一個 Date 格式化為日期/時間字串。
    • public Date parse(String source)
      解析字串的文字,生成 Date。
      程式碼練習:
package com.heima.otherclass;

import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo_SimpleDateFormat {
	public static void main(String[] args) throws ParseException {
	Date d = new Date();	//獲取當前系統時間
	System.out.println("當前系統時間:");
	System.out.println(d);	//顯示當前時間
	//demo1();
	demo2(d);
	demo3(d);
	String t = "2018年11月1日 12:04:08";	//當前時間的數字字串
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");	//建立自定義日期格式化類物件
	System.out.println("自定義時間的自定義格式化表示:");
	Date d2 = sdf.parse(t);	//將時間字串轉換為日期物件,這裡會丟擲異常,因為避免字串不符合格式
	System.out.println(d2);
	}

	private static void demo3(Date d) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");	//建立自定義日期格式化類物件
		System.out.println("自定義日期格式化類物件表示當前時間");
		System.out.println(sdf.format(d));
	}

	private static void demo2(Date d) {
		SimpleDateFormat sdf = new SimpleDateFormat();	//建立固定好的日期格式化類物件
		System.out.println("日期格式化後的當前時間:");
		System.out.println(sdf.format(d));
	}

	/*private static void demo1() {
		DateFormat df = new DateFormat(); //抽象類不能被例項化
		DateFormat df2 = DateFormat.getDateInstance();	//相當於是父類引用指向之類物件,該方法底層實現建立物件,返回一個子類物件
	}*/
}

程式結果:
當前系統時間:
Thu Nov 01 12:17:57 CST 2018
日期格式化後的當前時間:
18-11-1 下午12:17
自定義日期格式化類物件表示當前時間
2018年11月01日 12:17:57
自定義時間的自定義格式化表示:
Thu Nov 01 12:04:08 CST 2018