1. 程式人生 > 其它 >Java學習總結——時間類

Java學習總結——時間類

時間類總結

Java常用時間類總結:

  1. Date 日期類

  2. Calendar 日曆類

  3. SimpleDateFormat 格式化時間類

Date和Calendar類 在java.util包中

SimpleDateFormat類 在java.text包

1.Date 日期

【1】new Date() 可以獲取到系統時間

【2】getTime() 能獲取到時間的long形式,可以用來計算時間差

getTime()——獲取計算機底層儲存的數字,返回一個數字用來表示時間,這個數字的型別long,單位為毫秒。

【參考程式碼】

import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d); // 系統時間
        //get...()——獲取年月日.....
        System.out.println(d.getYear()+1900); // 從1900年開始算的
        System.out.println(d.getMonth()+1); // 月份從0開始計算
        System.out.println(d.getDate()); // 天數
        System.out.println(d.getHours());// 小時

        //getTime()——獲取到時間的毫秒形式 返回的是long
        System.out.println(d.getTime());
    }
}

2.Calendar 日曆

【1】get() 獲取到時間的某一部分

【2】set() 設定時間 - -> 計算時間:系統已經幫我們設定好了,不用擔心二月有多少天等問題,計算時間十分方便

注:Calendar 日曆類是抽象類,因此不可以去new物件。雖然抽象類不能建立物件,但是jdk官方提供了一個例項物件的操作:

​ Calendar rightNow = Calendar.getInstance();

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

【參考程式碼】:get() 獲取到時間的某一部分:

package date;

import java.util.Calendar;

public class TestCalendar {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
//        System.out.println(cal);
        
        /*
 假設當天:
        2021
        8
        10
         */
		cal.set(Calendar.DATE,cal.get(Calendar.DATE)+31); // 計算時間(這裡用天數計算的) 
        
        // 獲取Calendar建立的物件裡的所有內容
        System.out.println(cal.get(Calendar.YEAR)); // 2021 年
        System.out.println(cal.get(Calendar.MONTH)+1); // 月份:從0開始的  結果:為10月
        System.out.println(cal.get(Calendar.DATE)); // 日
        System.out.println(cal.get(Calendar.HOUR_OF_DAY));// 小時
        System.out.println(cal.get(Calendar.MINUTE));
        System.out.println(cal.get(Calendar.SECOND));
    }
}

【參考程式碼】:set() 設定時間 - -> 計算時間:

注:cal.setTime(d); 把Date轉化成Calendar

package date;

import java.util.Calendar;
import java.util.Date;

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

        Date d = new Date();

        Calendar cal = Calendar.getInstance();

        cal.setTime(d);// 把Date轉化成Calendar

        System.out.println(cal);
        System.out.println(cal.get(Calendar.YEAR)); //  年
        System.out.println(cal.get(Calendar.MONTH)+1); // 月份:從0開始的
        System.out.println(cal.get(Calendar.DATE)); // 日
        
    }
}

3.SimpleDateFormat格式化時間

Date,Calendar通過引用也可以進行時間的格式化,但比較繁瑣,而SimpleDateFormat類是專門幫我們格式化時間的工具類,它在java.text包中。

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

SimpleDateFormat類有兩大常用方法:

【1】format(Date):

format(Date) 幫我們把時間轉成字串,字串的格式為SimpleDateFormat類定義物件時設定的時間格式

【參考程式碼】

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
    }
}

【2】parse(String):

parse(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);
        
        /*
        請輸入一個時間(yyyy-MM-dd HH:mm:ss):
        2021-08-12 12:25:21
        Thu Aug 12 12:25:21 CST 2021
         */
    }
}

注:由於使用者輸入的字串不一定是我們要求的格式,可能是任何東西,想把它們轉成時間是不可能的,你不可能把一個人轉成時間 對吧,因此存在著很大的風險未處理(異常: java.text.ParseException),為此我們需要處理異常。

4.計算時間差

計算思路:

  1. 格式化時間
  2. 先將字串轉化成long型別時間
  3. 計算毫秒級別時間差,取絕對值
  4. 毫秒級別時間差轉成秒級別
  5. 秒級別時間差轉成分鐘級別
  6. 分鐘級別時間差轉化顯示成xx小時xx分鐘

【參考程式碼】

package Simple;

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

public class TestDiff {
    public static void main(String[] args) throws ParseException {

        String s1 = "2021-08-12 12:00:00"; // 開始時間
        String s2 = "2021-08-12 14:35:00"; // 結束時間

        //格式化時間
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");

        //將字串轉成時間形式
        Date d1 = sdf.parse(s1);
        Date d2 = sdf.parse(s2);

        //計算時間差:先要獲取時間毫秒形式(long型別) 再做差
        long long1 = d1.getTime();
        long long2 = d2.getTime();
        long diffTime = Math.abs(long1 - long2);

        // 秒級別時間差
        long diffSec = diffTime / 1000;

        // 分級別時間差
        long diffMin = diffSec / 60;

        //顯示 xx小時xx分鐘
        long displayHours = diffMin / 60; // 小時
        long displayMin = diffMin % 60; //分鐘

        System.out.println("您學習的時長為:"+displayHours+"小時"+displayMin+"分鐘");

    }
}