JAVA學(xué)習(xí)進(jìn)階篇之時(shí)間與日期相關(guān)類
Date類
java.util.Date:表示日期和時(shí)間的類,Date 表示特定的瞬間,精確到毫秒。
毫秒值的概念與作用
毫秒:千分之一秒,1000毫秒=1。
秒特定的瞬間:一個(gè)時(shí)間點(diǎn),一剎那時(shí)間
例如:
2088-08-08 09:55:33:333瞬間
2088-08-0809:55:33:334瞬間
2088-08-08 09:55:33:335瞬間
…
毫秒值的作用:可以對(duì)時(shí)間和日期進(jìn)行計(jì)算。
2022-01-01到2088-01-01中間一共有多少天?
可以日期轉(zhuǎn)換為毫秒進(jìn)行計(jì)算,計(jì)算完畢,在把毫秒轉(zhuǎn)換為日期。
把日期轉(zhuǎn)換為毫秒:
當(dāng)前的日期:2022-08-28
時(shí)間原點(diǎn)(0毫秒):1970年1月1日00:00:00(英國(guó)格林威治)
就是計(jì)算當(dāng)前日期到時(shí)間原點(diǎn)之間一共經(jīng)歷了多少毫秒(374267540068L)
注意:
中國(guó)屬于東八區(qū),會(huì)把時(shí)間增加8個(gè)小時(shí)1970年1月1日08:00:00
把毫秒轉(zhuǎn)換為日期:
1天=24x60x60=86400秒=86400x1000=86400000毫秒
構(gòu)造方法
學(xué)習(xí)類都是一個(gè)過(guò)程,先學(xué)習(xí)這個(gè)類的構(gòu)造方法;有了構(gòu)造方法后,就可以創(chuàng)建對(duì)象,然后通過(guò)對(duì)象調(diào)用它里面的成員方法。
無(wú)參構(gòu)造
public static void main(String[] args) { //Data的空參數(shù)構(gòu)造方法-Data()獲取當(dāng)前系統(tǒng)的時(shí)間(精確到毫秒的系統(tǒng)當(dāng)前時(shí)間) Date date = new Date(); //java.util.Date類的toString()方法已經(jīng)被重寫了 //所以直接輸出對(duì)象,不是這個(gè)對(duì)象的內(nèi)存地址,而是一個(gè)日期字符串 System.out.println(date); //輸出:Sun Aug 28 21:18:47 CST 2022 }
有參構(gòu)造
public static void main(String[] args) { // Date類的帶參數(shù)構(gòu)造方法 //Date(long date) :傳遞毫秒值轉(zhuǎn)換為Date日期 Date date = new Date(0L); //把參數(shù)里面的毫秒轉(zhuǎn)成對(duì)應(yīng)的日期 System.out.println(date); //輸出:Thu Jan 01 08:00:00 CST 1970 Date date1 = new Date(1620543792746L); //把參數(shù)里面的毫秒轉(zhuǎn)成對(duì)應(yīng)的日期 System.out.println(date1); //輸出:Sun May 09 15:03:12 CST 2021 }
成員方法getTime()
public static void main(String[] args) { // Long getTime()把日期轉(zhuǎn)換為毫秒值(相當(dāng)于System.currentTimeMillis()方法) // 返回自1970年 1月一日 00:00:00 到當(dāng)前系統(tǒng)時(shí)間一共經(jīng)歷了多少毫秒 Date date = new Date(); long time = date.getTime(); System.out.println(time); //1661693372684 }
currentTimeMillis方法
此方法是System類的一個(gè)方法,作用和getTime()一樣,返回自1970年 1月一日 00:00:00
到當(dāng)前系統(tǒng)時(shí)間一共經(jīng)歷了多少毫秒。
public static void main(String[] args) { Long TimeMillis = System.currentTimeMillis(); System.out.println(TimeMillis); //輸出:1661693849165 }
那么這個(gè)方法可以用來(lái)干什么呢?
看的出來(lái),經(jīng)過(guò)測(cè)試,下列代碼空循環(huán)一億次,用了3毫秒
public static void main(String[] args) { //統(tǒng)計(jì)一個(gè)方法的耗時(shí) //在調(diào)用目標(biāo)方法之前記錄一個(gè)毫秒數(shù) Long TimeMillis = System.currentTimeMillis(); //這里調(diào)用方法 print(); //在執(zhí)行完目標(biāo)方法之后記錄一個(gè)毫秒數(shù) Long end = System.currentTimeMillis(); System.out.println("耗費(fèi)時(shí)長(zhǎng):"+(end-TimeMillis)+"毫秒"); //輸出:耗費(fèi)時(shí)長(zhǎng):3毫秒 } public static void print(){ for (int i = 0; i < 100000000; i++) { } }
DateFormat和SimpleDateFormat類
DateFormat類和它的子類SimpleDateFormat,后者是前者的子類,所以它有父類的format和parse方法。
java.text.DateFormat:是日期/時(shí)間格式化子類的抽象類。
作用: 格式化(也就是日期->文本) 、解析(文本->日期)
構(gòu)造方法
DateFormat類是一個(gè)抽象類,無(wú)法直接創(chuàng)建對(duì)象使用,可以使用DateFormat類的子類
java.text.SimpleDateformat extends DateFormat
構(gòu)造方法:
SimpleDateFormat(String pattern):用給定的模式和默認(rèn)語(yǔ)言環(huán)境的日期格式符號(hào)構(gòu)造SimpleDateFormat。
參數(shù): String pattern:傳遞指定的模式
模式:區(qū)分大小寫
y | 年 |
---|---|
M | 月 |
d | 日 |
H | 時(shí) |
m | 分 |
s | 秒 |
寫對(duì)應(yīng)的模式,會(huì)把模式替換為對(duì)應(yīng)的日期和時(shí)間 “yyyy-MM-dd HH:mm:ss”
注意:
模式中的字母不能更改,連接模式的符號(hào)可以改變"yyyy年MM月dd日 HH時(shí)mm分ss秒"
成員方法
String format(Date date)按照指定的模式,把Date日期,格式化為符合模式的字符串
Date parse(String source)把符合模式的字符串,解析為Date日期
使用這兩個(gè)成員方法及其細(xì)節(jié)
public static void main(String[] args) throws ParseException { demo01(); demo02(); //調(diào)用的方法也會(huì)出紅線,也要光標(biāo)放紅線上alt+回車選擇第一個(gè) } private static void demo01() { //使用DateFormat類中的format方法,把日期格式轉(zhuǎn)化為文本 //1.創(chuàng)建SimpleDateFormat對(duì)象,構(gòu)造方法中傳遞指定的模式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日 HH時(shí)mm分ss秒");//傳入指定的模式 //2.調(diào)用SimpleDateFormat對(duì)象中的方法format,按照構(gòu)造方法中指定的模式,把Date日期格式轉(zhuǎn)換為符合模式的字符串(文本) //String format(Date date) 按照指定模式,把Date日期,格式化為符合模式的字符串 Date date =new Date(); //獲取當(dāng)前系統(tǒng)時(shí)間 String format = sdf.format(date); System.out.println(date); //Sun May 09 16:09:50 CST 2021 System.out.println(format); //2021年09月09日 16時(shí)09分50秒 } /* 使用DateFormat類中的parse方法,把文本解析成為Date日期 1.創(chuàng)建SimpleDateFormat對(duì)象,構(gòu)造方法中傳遞指定的模式 2.調(diào)用SimpleDateFormat對(duì)象中的方法parse,把符合構(gòu)造方法中模式的字符串,解析為Date日期 注意: public Date parse(String source)throws ParsejException parse方法聲明一個(gè)異常叫ParseException 如果字符串和構(gòu)造方法的模式不一樣,那么程序就會(huì)拋出異常 調(diào)用一個(gè)拋出異常的方法,就必須的處理這個(gè)異常 要么throws繼續(xù)拋出這個(gè)異常,要么try catch自己處理 出現(xiàn)紅色的線,有異常,光標(biāo)放紅線上alt+回車選擇第一個(gè);調(diào)用的方法也會(huì)出紅線,也要光標(biāo)放紅線上alt+回車選擇第一個(gè) 這就是在我的方法聲明這個(gè)異常,我不處理,我聲明一下 程序沒(méi)有問(wèn)題,正常執(zhí)行 出現(xiàn)問(wèn)題,打印異常,并終止程序 */ private static void demo02() throws ParseException { //使用DateFormat類中的parse方法,把文本解析成為Date日期 //1.創(chuàng)建SimpleDateFormat對(duì)象,構(gòu)造方法中傳遞指定的模式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日 HH時(shí)mm分ss秒");//傳入指定的模式 //Date parse(String source) 把符合,模式的字符串,解析為Date日期 //2.調(diào)用SimpleDateFormat對(duì)象中的方法parse,把符合構(gòu)造方法中模式的字符串,解析為Date日期 /* 出現(xiàn)紅色的線,有異常,光標(biāo)放紅線上alt+回車選擇第一個(gè);調(diào)用的方法也會(huì)出紅線,也要光標(biāo)放紅線上alt+回車選擇第一個(gè) 這就是在我的方法聲明這個(gè)異常,我不處理,我聲明一下 */ // 把字符串類型按照傳入構(gòu)造模式解析成為Date類型,傳入指定模式和字符串要一樣,字符串這邊少個(gè)秒就報(bào)錯(cuò) Date parse = sdf.parse("2021年09月09日 16時(shí)09分50秒"); System.out.println(parse);//Sat Jan 09 16:09:50 CST 2021 }
練習(xí)
public static void main(String[] args) throws ParseException { Scanner scanner = new Scanner(System.in); // 輸入:2001-07-02 System.out.println("請(qǐng)輸入出生日期(格式為yyyy-mm-dd):"); String next = scanner.next(); //拿到字符串出生日期 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd"); Date parse = simpleDateFormat.parse(next); //把字符串出生日期解析成為DAte格式 long ee = parse.getTime(); // 把Date格式的出生日期轉(zhuǎn)換為毫秒值 Date aa = new Date(); //獲取當(dāng)前日期毫秒值 long hh = aa.getTime(); //把當(dāng)前日期毫秒值轉(zhuǎn)換成為毫秒值 // Date aa = new Date().getTime(); 一步到位 匿名 long dd = hh-ee; //差值 long jj = dd/1000/60/60/24; //把毫秒值轉(zhuǎn)換成為天 System.out.println(jj); // 輸出:7908。 代表著 2001-07-02 到今天已經(jīng)過(guò)了7908天 // System.out.println(dd/1000/60/60/24); //一步到位 }
總結(jié)
到此這篇關(guān)于JAVA學(xué)習(xí)進(jìn)階篇之時(shí)間與日期相關(guān)類的文章就介紹到這了,更多相關(guān)JAVA時(shí)間日期相關(guān)類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java對(duì)日期Date類進(jìn)行加減運(yùn)算、年份加減月份加減、時(shí)間差等等
- Java中的日期和時(shí)間類以及Calendar類用法詳解
- Java將日期類型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類型數(shù)據(jù)
- java實(shí)現(xiàn)的日期時(shí)間轉(zhuǎn)換工具類完整示例
- 史上最全Java8日期時(shí)間工具類(分享)
- java日期時(shí)間操作工具類
- JAVA時(shí)間日期處理類實(shí)例
- Java8 日期和時(shí)間類的基本使用
- JAVA中的日期時(shí)間類用法總結(jié)
- Java日期與時(shí)間類原理解析
相關(guān)文章
一文帶你學(xué)會(huì)規(guī)則引擎Drools的應(yīng)用
Drools?就是一個(gè)開源的業(yè)務(wù)規(guī)則引擎,可以很容易地與?spring?boot?應(yīng)用程序集成,這篇文章就來(lái)和大家詳細(xì)聊聊Drools的具體應(yīng)用,需要的可以參考一下2023-03-03MybatisPlus實(shí)現(xiàn)對(duì)象嵌套關(guān)聯(lián)查詢一對(duì)多List集合查詢
這篇文章主要介紹了MybatisPlus實(shí)現(xiàn)對(duì)象嵌套關(guān)聯(lián)查詢一對(duì)多List集合查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Spring數(shù)據(jù)源及配置文件數(shù)據(jù)加密實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Spring數(shù)據(jù)源及配置文件數(shù)據(jù)加密實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Java實(shí)現(xiàn)lucene搜索功能的方法(推薦)
下面小編就為大家?guī)?lái)一篇Java實(shí)現(xiàn)lucene搜索功能的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12Netty分布式pipeline傳播inbound事件源碼分析
這篇文章主要為大家介紹了Netty分布式pipeline傳播inbound事件的源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03Java的Struts框架中Action的編寫與攔截器的使用方法
這篇文章主要介紹了Java的Struts框架中Action的編寫與攔截器的使用方法,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-11-11JFileChooser實(shí)現(xiàn)對(duì)選定文件夾內(nèi)圖片自動(dòng)播放和暫停播放實(shí)例代碼
這篇文章主要介紹了JFileChooser實(shí)現(xiàn)對(duì)選定文件夾內(nèi)圖片自動(dòng)播放和暫停播放實(shí)例代碼,需要的朋友可以參考下2017-04-04Sleuth+logback 設(shè)置traceid 及自定義信息方式
這篇文章主要介紹了Sleuth+logback 設(shè)置traceid 及自定義信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java局部?jī)?nèi)部類和匿名內(nèi)部類定義與用法實(shí)例分析
這篇文章主要介紹了Java局部?jī)?nèi)部類和匿名內(nèi)部類,結(jié)合實(shí)例形式分析了java局部?jī)?nèi)部類和匿名內(nèi)部類相關(guān)定義、原理與用法,需要的朋友可以參考下2019-08-08