溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中Date類如何設(shè)置與操作時(shí)間

發(fā)布時(shí)間:2022-03-14 09:25:06 來(lái)源:億速云 閱讀:1815 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Java中Date類如何設(shè)置與操作時(shí)間,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Date

顧名思義,Date就是關(guān)于時(shí)間的一個(gè)類,這個(gè)類主要就是一些對(duì)時(shí)間的設(shè)置以及操作,查閱官方文檔可知,Date類繼承自java.lang.Object 類,相關(guān)的構(gòu)造方法如下:

構(gòu)造方法:

Date():無(wú)參構(gòu)造,分配一個(gè) Date對(duì)象并將它初始化,它代表的時(shí)間分配給它,測(cè)量精確到毫秒:

import java.util.Date;   //因?yàn)檫@個(gè)類屬于util包內(nèi),所以需要事先導(dǎo)入
Date d = new Date();    //無(wú)參構(gòu)造,創(chuàng)建對(duì)象
System.out.println(d);

//輸出: Fri Jan 14 10:22:58 CST 2022    CST為中國(guó)標(biāo)準(zhǔn)時(shí)間
//若直接使用無(wú)參構(gòu)造,其實(shí)就是輸出當(dāng)前的系統(tǒng)時(shí)間

Date(long date) :有參構(gòu)造

首先一秒等于1000毫秒,這個(gè)有參構(gòu)造就是分配一個(gè) Date對(duì)象并將它初始化為代表指定的毫秒數(shù)自基準(zhǔn)時(shí)間被稱為格林威治時(shí)間,即1970年1月1日,00:00:00 GMT。 也就是傳入一個(gè)毫秒數(shù),然后從1970年1月1日,00:00:00 開始增加輸入的時(shí)間:

//有參構(gòu)造

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

//輸出:Thu Jan 01 08:00:05 CST 1970
//為什么我這里數(shù)輸出08:00:05呢?  注意看,我的是CST中國(guó)標(biāo)準(zhǔn)時(shí)間,中國(guó)屬于東八區(qū),所以需要+8
//其實(shí)換算到GMT(格林威治時(shí)間)就是-8,也就是00:00:05,沒有問題的

Date類的方法:

getTime(): 來(lái)獲取毫秒數(shù),其返回值類型是long,其可以把日期對(duì)象轉(zhuǎn)成毫秒值

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

//輸出:1642127814408
//這個(gè)數(shù)值就是從1970-1-1 00:00:00開始計(jì)算的毫秒值

hashCode():返回此對(duì)象的哈希代碼值,其實(shí)這個(gè)用處不大,了解即可

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

//輸出:1450437638  哈希嗎值

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

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

//輸出:true,因?yàn)橥瑫r(shí)創(chuàng)建了兩個(gè)對(duì)象,都是當(dāng)前時(shí)間,因?yàn)橛?jì)算機(jī)運(yùn)行速度很快,甚至沒有一毫秒
//所以兩個(gè)時(shí)間是相同的

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

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

這兩個(gè)方法大家可以自行去試試~~~

但是我們會(huì)發(fā)現(xiàn),Date類不能輸出類似于普遍的時(shí)間格式:比如2021年01=年01日 13時(shí)00分 所以我們需要Calenda類。

Calenda:

calendar類位于java.util包中,它提供多個(gè)方法獲取,設(shè)置,增加日歷字段值,比Date類更強(qiáng)大,

calendar是抽象類,所以不能直接使用new去新建對(duì)象。

所以我們需要使用到GregorianCalendar類,這個(gè)類也是Calenda的子類,提供了世界上大多數(shù)使用標(biāo)準(zhǔn)的日歷系統(tǒng)。

Java中Date類如何設(shè)置與操作時(shí)間

使用該類獲得當(dāng)前年份、月份和當(dāng)前是周幾的代碼:

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

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

get方法:

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

比如輸出年月日時(shí)分秒,這也是一般網(wǎng)頁(yè)和系統(tǒng)都會(huì)顯示的時(shí)間:(完整代碼)

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+"時(shí)"+min+"分"+second+"秒");
        
    }
}

//輸出:2022年1月14日11時(shí)14分36秒     這樣是不是就是時(shí)間輸出的理想格式呢
//這也是我在寫這個(gè)博客的時(shí)間~~~

set方法:

上面我們用到的是get方法,那當(dāng)然也有對(duì)應(yīng)的set方法,來(lái)設(shè)置一下自定義的時(shí)間:

以設(shè)置為2020年1月1日為例:

//這部分代碼還是以上面get方法的代碼為基礎(chǔ)

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

//當(dāng)set完后,再去使用get方法去獲取,那么獲取到的就是修改后的時(shí)間了

//輸出:2020年1月1日

但是在設(shè)置時(shí)間中若把月份輸入大于11或者天數(shù)設(shè)置大于30天或31天(2月大于28天),那么將會(huì)自動(dòng)往前進(jìn)一:

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

//輸出:2020年2月4日
//輸入是1月份,但是天數(shù)大于真實(shí)一個(gè)月的天數(shù),所以會(huì)增加一個(gè)月

SimpleDateFormat:

但是在實(shí)際應(yīng)用過程中,可能對(duì)時(shí)間的格式要求不一樣,比如有:

  • 2020/01/01 12:00:00

  • 2020-01-01 星期* 上/下午

  • 2020年01月01日 12時(shí)00分00秒 ----------等等

所以我們不可能在每一次需要不一樣的格的時(shí)候再去重新寫代碼,所以Java提供了這個(gè)SimpleDateFormat類:

Java中Date類如何設(shè)置與操作時(shí)間

這個(gè)類屬于text包下,所以使用前需要導(dǎo)入,分別繼承自O(shè)bject、Format、DateFormat類,這個(gè)類的一些格式符號(hào)如下圖:

Java中Date類如何設(shè)置與操作時(shí)間

回到前面,我們?nèi)绻枰蛴〔煌母袷綍r(shí)間,該怎么做呢? 我們先來(lái)看看SimpleDateFormat的構(gòu)造方法:

Java中Date類如何設(shè)置與操作時(shí)間

先看第二個(gè):SimpleDateFormat(String pattern) :使用給定的模式和默認(rèn)的日期格式符號(hào)默認(rèn) FORMAT現(xiàn)場(chǎng)構(gòu)建了一個(gè) SimpleDateFormat,意思是根據(jù)你給定的格式符號(hào)來(lái)創(chuàng)建這個(gè)時(shí)間的對(duì)象。

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

}

代碼解釋:其實(shí)這個(gè)方法就是傳入一個(gè)Date類的時(shí)間,和SimpleDateFormat有參構(gòu)造方法需要的一個(gè)參數(shù)pattern,也就是格式符,根據(jù)上那張表格查看需要什么格式即可,然后使用format方法即可。

完整代碼:

import java.text.SimpleDateFormat;   //記得要導(dǎo)入哦
import java.util.Date;

public class test03 {

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

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

}

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

"yyy年MM月dd日 HH時(shí)mm分ss秒 E a"
//輸出:2022年01月14日 15時(shí)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
//可以根據(jù)需要,結(jié)合上面的符號(hào)表,去自定義想要的時(shí)間格式啦~~~~

關(guān)于“Java中Date類如何設(shè)置與操作時(shí)間”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI