首頁 > 軟體

Java Date類十分鐘理清時間的設定與操作

2022-03-11 19:01:45

Date

顧名思義,Date就是關於時間的一個類,這個類主要就是一些對時間的設定以及操作,查閱官方檔案可知,Date類繼承自java.lang.Object 類,相關的構造方法如下:

構造方法:

Date():無參構造,分配一個 Date物件並將它初始化,它代表的時間分配給它,測量精確到毫秒:

import java.util.Date;   //因為這個類屬於util包內,所以需要事先匯入
Date d = new Date();    //無參構造,建立物件
System.out.println(d);

//輸出: Fri Jan 14 10:22:58 CST 2022 CST為中國標準時間
//若直接使用無參構造,其實就是輸出當前的系統時間

Date(long date) :有參構造

首先一秒等於1000毫秒,這個有參構造就是分配一個 Date物件並將它初始化為代表指定的毫秒數自基準時間被稱為格林威治時間,即1970年1月1日,00:00:00 GMT。 也就是傳入一個毫秒數,然後從1970年1月1日,00:00:00 開始增加輸入的時間:

//有參構造

Date d = new Date(5000);  //5000毫秒等於5秒
System.out.println(d);

//輸出:Thu Jan 01 08:00:05 CST 1970
//為什麼我這裡數輸出08:00:05呢? 注意看,我的是CST中國標準時間,中國屬於東八區,所以需要+8
//其實換算到GMT(格林威治時間)就是-8,也就是00:00:05,沒有問題的

Date類的方法:

getTime(): 來獲取毫秒數,其返回值型別是long,其可以把日期物件轉成毫秒值

System.out.println(d.getTime());

//輸出:1642127814408
//這個數值就是從1970-1-1 00:00:00開始計算的毫秒值

hashCode():返回此物件的雜湊程式碼值,其實這個用處不大,瞭解即可

System.out.println(d.hashCode());

//輸出:1450437638 雜湊嗎值

equals(Object obj) :比較兩個相等的日期

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

//輸出:true,因為同時建立了兩個物件,都是當前時間,因為計算機執行速度很快,甚至沒有一毫秒
//所以兩個時間是相同的

after(Date when):測試如果這個日期是在指定日期之後返回true,否則false

before(Date when) :測試如果這個日期是在指定日期之前返回true,否則false

這兩個方法大家可以自行去試試~~~

但是我們會發現,Date類不能輸出類似於普遍的時間格式:比如2021年01=年01日 13時00分 所以我們需要Calenda類。

Calenda:

calendar類位於java.util包中,它提供多個方法獲取,設定,增加日曆欄位值,比Date類更強大,

calendar是抽象類,所以不能直接使用new去新建物件。

所以我們需要使用到GregorianCalendar類,這個類也是Calenda的子類,提供了世界上大多數使用標準的日曆系統。

使用該類獲得當前年份、月份和當前是周幾的程式碼:

GregorianCalendar g = new GregorianCalendar();   //新建一個GregorianCalendar 物件
int year = g.get(Calendar.YEAR);
int month = g.get(Calendar.MONTH);  //使用GregorianCalendar 的get方法,獲取當前月份
int day = g.get(Calendar.DAY_OF_MONTH);   //使用GregorianCalendar 的get方法,獲取當前日期
System.out.println(year+"年"+month+"月"+day+"日");

//輸出:2022年0月14日
//解釋:月份是從0開始計算的,所以0代表一月,11代表12月。月份返回為0-11
//解決方法:
System.out.println(year+"年"+(month+1)+"月"+day+"日"); //在月份後面+1即可
//輸出:2022年1月14日

get方法:

也可以使用GregorianCalendar 輸出更具體的時間格式:

比如輸出年月日時分秒,這也是一般網頁和系統都會顯示的時間:(完整程式碼)

package DateTest;

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

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

        Date a = new Date();
        GregorianCalendar g = new GregorianCalendar();

        int year = g.get(Calendar.YEAR);
        int month = g.get(Calendar.MONTH);
        int day = g.get(Calendar.DAY_OF_MONTH);
        int hour = g.get(Calendar.HOUR_OF_DAY);
        int min = g.get(Calendar.MINUTE);
        int second = g.get(Calendar.SECOND);

        System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"時"+min+"分"+second+"秒");
        
    }
}

//輸出:2022年1月14日11時14分36秒 這樣是不是就是時間輸出的理想格式呢
//這也是我在寫這個部落格的時間~~~

set方法:

上面我們用到的是get方法,那當然也有對應的set方法,來設定一下自定義的時間:

以設定為2020年1月1日為例:

//這部分程式碼還是以上面get方法的程式碼為基礎

g.set(Calendar.YEAR,2020);
g.set(Calendar.MONTH,0);   //千萬不要忘了月份的起始值為 0,0代表一月
g.set(Calendar.DAY_OF_MONTH,1);

//當set完後,再去使用get方法去獲取,那麼獲取到的就是修改後的時間了

//輸出:2020年1月1日

但是在設定時間中若把月份輸入大於11或者天數設定大於30天或31天(2月大於28天),那麼將會自動往前進一:

g.set(Calendar.YEAR,2020);
g.set(Calendar.MONTH,0);
g.set(Calendar.DAY_OF_MONTH,35);   //日期輸入35天 

//輸出:2020年2月4日
//輸入是1月份,但是天數大於真實一個月的天數,所以會增加一個月

SimpleDateFormat:

但是在實際應用過程中,可能對時間的格式要求不一樣,比如有:

  • 2020/01/01 12:00:00
  • 2020-01-01 星期* 上/下午
  • 2020年01月01日 12時00分00秒 ----------等等

所以我們不可能在每一次需要不一樣的格的時候再去重新寫程式碼,所以Java提供了這個SimpleDateFormat類:

這個類屬於text包下,所以使用前需要匯入,分別繼承自Object、Format、DateFormat類,這個類的一些格式符號如下圖:

回到前面,我們如果需要列印不同的格式時間,該怎麼做呢? 我們先來看看SimpleDateFormat的構造方法:

先看第二個:SimpleDateFormat(String pattern) :使用給定的模式和預設的日期格式符號預設 FORMAT現場構建了一個 SimpleDateFormat,意思是根據你給定的格式符號來建立這個時間的物件。

public static String dateToString(Date d,String pattern){   //新建一個靜態方法
	
	SimpleDateFormat s = new SimpleDateFormat(pattern);    //有參構造
	String time = s.format(d); 
	//SimpleDateFormat的format方法:給定的 Date進入日期/時間線和附加的結果給出的 StringBuffer格式。 
	return time;   //返回時間

}

程式碼解釋:其實這個方法就是傳入一個Date類的時間,和SimpleDateFormat有參構造方法需要的一個引數pattern,也就是格式符,根據上那張表格檢視需要什麼格式即可,然後使用format方法即可。

完整程式碼:

import java.text.SimpleDateFormat;   //記得要匯入哦
import java.util.Date;

public class test03 {

    public static void main(String[] args) {
        Date d = new Date();   //建立方法需要的物件Date d
        String t = dateToString(d,"yyyy-MM-dd HH:mm:ss: E a");  //E代表周幾,a代表上/下午
        System.out.println(t);  //使用方法
    }

//方法區
    public static String dateToString(Date d,String pattern){
        SimpleDateFormat s = new SimpleDateFormat(pattern);
        String time = s.format(d);
        return time;
    }

}

如果我們需要輸出別的格式:

"yyy年MM月dd日 HH時mm分ss秒 E a"
//輸出:2022年01月14日 15時45分06秒 星期五 下午

"yyyy/MM/dd HH:mm:ss E a"
//輸出:2022/01/14 15:45:36 星期五 下午

"MM/dd/yyyy HH:mm:ss" //甚至把年份方後面
//輸出:01/14/2022 15:46:24
//可以根據需要,結合上面的符號表,去自定義想要的時間格式啦~~~~

關於Date類,就介紹到這啦,大家看完了快去試試吧~~

到此這篇關於Java Date類十分鐘理清時間的設定與操作的文章就介紹到這了,更多相關Java Date類內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com