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。
程式碼練習:
- public final String format(Date 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