您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Java中Date類如何設(shè)置與操作時(shí)間,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
顧名思義,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,沒有問題的
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類。
calendar類位于java.util包中,它提供多個(gè)方法獲取,設(shè)置,增加日歷字段值,比Date類更強(qiáng)大,
calendar是抽象類,所以不能直接使用new去新建對(duì)象。
所以我們需要使用到GregorianCalendar類,這個(gè)類也是Calenda的子類,提供了世界上大多數(shù)使用標(biāo)準(zhǔn)的日歷系統(tǒng)。
使用該類獲得當(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è)月
但是在實(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類:
這個(gè)類屬于text包下,所以使用前需要導(dǎo)入,分別繼承自O(shè)bject、Format、DateFormat類,這個(gè)類的一些格式符號(hào)如下圖:
回到前面,我們?nèi)绻枰蛴〔煌母袷綍r(shí)間,該怎么做呢? 我們先來(lái)看看SimpleDateFormat的構(gòu)造方法:
先看第二個(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)把它分享出去讓更多的人看到。
免責(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)容。