Java時間類從此變得清晰明了

Java時間類

Java時間類分為Date 日期類和Calendar 日曆類,相信很多小夥伴在初學時會對這個兩個類的用法、區別以及有什麼聯繫會感到疑惑,似乎懂了,但又不能具體說清,今天再帶你來清晰的再次認識它倆!

Date 類

為了更直觀了解,話不多說,直接上程式碼

【參考程式碼】

package date;

import java.util.Date;

public class Test {
    public static void main(String[] args) {

        Date d = new Date(); // 系統時間——運行程式時的時間
        System.out.println(d); // Fri Aug 13 08:03:49 CST 2021

        //使用Date類中對應的get方法用來獲取具體時間:年月日,時分秒
        System.out.println(d.getYear() + 1900);// 年
        System.out.println(d.getMonth()+1);// 月
        System.out.println(d.getDate());// 日
        System.out.println(d.getHours());// 時
        System.out.println(d.getMinutes());// 分
        System.out.println(d.getSeconds());// 秒

        //Date類常用方法getTime();
        //getTime()——獲取到時間的毫秒形式 返回的是long
        System.out.println(d.getTime());// 1628813591697
        
    }
}

輸出結果:

Fri Aug 13 08:13:11 CST 2021
2021
8
13
8
13
11
1628813591697

image

註:年份是從1900年開始的;月份是從0開始的。

Markdown程式碼塊里是不顯示刪除線的,這裡截圖給大家。通過上述get方法,Date類可以獲取具體時間,不過,這些函數的 API 不易於實現國際化,官方不再推薦使用Date類來獲取時間,推薦使用Calendar類。因此,這裡刪除線代表可以用但不推薦。

總結:對於Date類我們需要掌握:

  1. new Date() 可以獲取到系統時間
  2. getTime() 能獲取到時間的long形式,可以用來計算時間差

Calendar類

上面我們已經知道Date類不再推薦用來獲取時間,而是推薦Calendar類,話不多說直接上程式碼

註:Calendar 日曆類,是一個抽象類,裡邊提供了很多操作日曆欄位的方法如:YEAR、 MONTH、 DAY OF MONTH、HOUR。因此不可以去new對象。雖然抽象類不能創建對象,但是jdk官方提供了一個實例對象的操作:

​ Calendar cal = Calendar.getInstance();

我們通過這條程式碼就是直接造了一個Calender的對象

【參考程式碼】

package date;
import java.util.Calendar;
import java.util.Date;

public class TestCalendar {
    public static void main(String[] args) {

        Calendar cal = Calendar.getInstance();// 實例化對象

        System.out.println(cal);//java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,....]

        //用Calendar類get方法來獲取具體時間
        System.out.println(cal.get(Calendar.YEAR));// 年  2021
        System.out.println(cal.get(Calendar.MONTH)+1);// 8月 月份從0開始
        System.out.println(cal.get(Calendar.DATE));// 日
        System.out.println(cal.get(Calendar.HOUR));// 時
        System.out.println(cal.get(Calendar.MINUTE));// 分
        System.out.println(cal.get(Calendar.SECOND));// 秒

        //用Calendar類set方法設置時間--->用於計算
        cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 十年以後 2031
        System.out.println(cal.get(Calendar.YEAR));
        cal.set(Calendar.MONTH,cal.get(Calendar.MONTH)+4);// 3月以後 11 月份從0開始的
        System.out.println(cal.get(Calendar.MONTH));
        //...同理日,時分秒都可以設置並計算
        
    }
}

輸出結果:

java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,….]

2021 // 年
8 // 月
13 // 日
9
5
22
2031 // 十年以後
11 //3月以後

【參考程式碼】

Calendar cal = Calendar.getInstance();// 實例化對象

get()方法解釋:
get(你想獲取的Canendar對象的資訊)
例:cal.get(Calendar.YEAR);// 獲取年份

set()方法解釋:
set(需要設置的Calendar對象,獲取該對象你需要資訊)--->設置就可以用來計算
例:
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 計算十年以後
System.out.println(cal.get(Calendar.YEAR));

Date類和Calendar類相互轉換:

Date類和Calendar類既然有聯繫那必然可以相互轉換,下面這段程式碼讓大家更直觀的了解:

【參考程式碼】

Date d = new Date();
System.out.println(d);

Calendar cal = Calendar.getInstance();//實例化對象
cal.getTime();
System.out.println(cal.getTime());
/*
輸出結果:
Fri Aug 13 09:35:45 CST 2021
Fri Aug 13 09:35:45 CST 2021
 */

Calendar實例化的對象.getTime()就能獲取到當前的系統時間,即一個Date對象,也就是Date d==cal.getTime();

Calendar類轉成了Date類

   Calendar cal = Calendar.getInstance();
   Date d = cal.getTime();

Date類轉成了Calendar類

    Date date = new Date();  
    Calendar cal = Calendar.getInstance();  
    cal.setTime(date); 

總結:對於Calendar類我們需要掌握:

  1. get()方法 獲取到時間的某一部分
  2. set()方法 設置時間 – -> 計算時間:系統已經幫我們設置好了,不用擔心二月有多少天等問題,計算時間十分方便
  3. getTime()方法,得到的是一個Date類型的實例
  4. setTime()方法,將Date類型的實例給到Calendar類

格式化時間

通過上面的學習,我們知道Date,Calendar類通過引用可以進行時間的格式化,將年月日、時分秒一個個例舉出來,可見比較繁瑣,而SimpleDateFormat類是專門幫我們格式化時間的工具類,format()方法 和 parse()方法 能夠幫我們在時間和字元串之間相互轉換,十分方便。它在java.text包中。

時間轉成字元串:format(Date date)方法

format(Date) 幫我們把時間轉成字元串,格式化時間。字元串的格式為SimpleDateFormat類定義對象時設置的時間格式

【時間格式】:yyyy-MM-dd HH:mm:ss

【參考程式碼】

package Simple;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;

public class Test {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d); //Thu Aug 12 08:40:08 CST 2021  不美觀

		//設置格式化時間的模式,我們常用yyyy-MM-dd HH:mm:ss這個字元串模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 時間格式
        String s = sdf.format(d); // 格式化時間
        System.out.println(s); // 2021-08-12 08:45:09
    }
}

字元串轉成時間:parse(String string)方法

【參考程式碼】

package Simple;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) throws ParseException {
    
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入一個時間(yyyy-MM-dd HH:mm:ss):");
        String s = sc.nextLine();

       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       Date d =  sdf.parse(s); // 把字元串轉成時間
        System.out.println(d); //Thu Aug 12 12:25:21 CST 2021
        
    }
}

程式執行,輸入和輸出結果如下:

請輸入一個時間(yyyy-MM-dd HH:mm:ss):

2021-08-12 12:25:21

Thu Aug 12 12:25:21 CST 2021

總結

看到這裡,相信各位看官都對Java中的時間類的知識和使用有了一定了解,感謝各位看到這裡!願你韶華不負,青春無悔!

注: 由於自己剛剛開始學習Java不久,語言文字描述、技術等各方面還不是很好,如果文章有任何錯誤和建議,請各位大佬盡情評論留言!如果這篇文章對你有些許幫助,希望可愛親切的您點個贊推薦一手,非常感謝啦!

image