Java中使用LocalDate根據(jù)日期來(lái)計(jì)算年齡的實(shí)現(xiàn)方法
Java中和日期直接相關(guān)的類有很多,平時(shí)最常用到的就是java.util package下面的Date和Calendar,需要用到格式的時(shí)候還會(huì)用到j(luò)ava.text.SimpleDateFormat
首先吐槽一下,Date和Calendar實(shí)際用起來(lái)還是有一些別扭的,剛開始用的時(shí)候不熟悉,老是分不清Date和Calendar類的具體用法和區(qū)別。
而且Calendar類的set方法來(lái)設(shè)置日期時(shí)又有一些反人類,設(shè)置月份的時(shí)候總是要腦補(bǔ)一下減去1,比如要設(shè)置為2018年1月6日就要設(shè)置成2018,0,6,因?yàn)樵谶@里一月是用0來(lái)表示的:
Calendar cal = Calendar.getInstance(); cal.set(2018, 0, 8);
具體的原因可以看這里的回答:StackOverflow: Why is January month 0 in Java Calendar?
反正我是不太看得下去。。
前幾天有一個(gè)簡(jiǎn)單的需求,就是根據(jù)某兩個(gè)日期來(lái)計(jì)算出年齡。上網(wǎng)查了一下,直接拋棄了難用的Date和Calendar類,直接用java.time.LocalDate來(lái)做。話不多說(shuō)直接上代碼:
import java.time.LocalDate; public class TestLocalDate { public static void main(String[] args) { LocalDate date1 = LocalDate.of(2018, 1, 6); LocalDate date2 = LocalDate.of(1991, 1, 3); int age = date2.until(date1).getYears(); System.out.println("You're " + age + " years old."); } }
輸出結(jié)果:
You're 27 years old.
拋棄了略顯復(fù)雜令人頭大的Date和Calendar類之間的互相轉(zhuǎn)換調(diào)用,代碼讀起來(lái)也特別清晰,是不是很爽!
java.time是Java 8中新引入的一個(gè)日期時(shí)間庫(kù),下面的這些方法都是java.time包里面的。
下面來(lái)看一下這段代碼是怎么來(lái)用簡(jiǎn)單清爽的方式計(jì)算時(shí)間差的:
首先,LocalDate是一個(gè)immutable class(不可變類),所以和String類一樣,不需要new一個(gè)新的對(duì)象才可以使用(?)
然后是LocalDate類用于設(shè)定日期的of方法:
public static LocalDate of(int year, Month month, int dayOfMonth) public static LocalDate of(int year, int month, int dayOfMonth)
of一共有三個(gè)重載的方法,這里舉出其中的兩個(gè)。第一個(gè)的Month類是一個(gè)枚舉類型,包含了月份的英文名稱,如JANUARY, NOVEMBER等
第二個(gè)就是再正常不過(guò)的設(shè)置年月日,好消息是這里的month是從1開始的,也就是說(shuō)再也不用手動(dòng)減去1了?。?!
下面是LocalDate類用于比較日期的until方法:
public Period until(ChronoLocalDate endDateExclusive)
這個(gè)方法返回的是一個(gè)Period類型的對(duì)象。
Period代表的是形如“2年,3個(gè)月,4天”的一段時(shí)間間隔。接下來(lái)調(diào)用的getYears方法就是屬于Period類的。
最后再來(lái)看一下Period類的一些獲取時(shí)間間隔的方法:
public int getYears() public int getMonths() public int getDays()
這三個(gè)方法分別用于獲取時(shí)間間隔的年、月和日。對(duì),就是這么簡(jiǎn)單。
總結(jié)
以上所述是小編給大家介紹的Java中使用LocalDate根據(jù)日期來(lái)計(jì)算年齡的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
java.sql.SQLException:com.mysql.cj.jdbc.Driver報(bào)錯(cuò)問(wèn)題解決
這篇文章主要給大家介紹了關(guān)于java.sql.SQLException:com.mysql.cj.jdbc.Driver報(bào)錯(cuò)問(wèn)題解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08Java中List與數(shù)組之間的相互轉(zhuǎn)換
在日常Java學(xué)習(xí)或項(xiàng)目開發(fā)中,經(jīng)常會(huì)遇到需要int[]數(shù)組和List列表相互轉(zhuǎn)換的場(chǎng)景,然而往往一時(shí)難以想到有哪些方法,最后可能會(huì)使用暴力逐個(gè)轉(zhuǎn)換法,往往不是我們所滿意的,下面這篇文章主要給大家介紹了關(guān)于Java中List與數(shù)組之間的相互轉(zhuǎn)換,需要的朋友可以參考下2023-05-05jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行修改url操作
這篇文章主要為大家詳細(xì)介紹了jdbc鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行修改url操作,感興趣的小伙伴們可以參考一下2016-06-06深入理解Java設(shè)計(jì)模式之簡(jiǎn)單工廠模式
這篇文章主要介紹了JAVA設(shè)計(jì)模式之簡(jiǎn)單工廠模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2021-11-11詳解Java如何在Array和List之間進(jìn)行轉(zhuǎn)換
這篇文章主要為大家介紹了詳解Java如何在Array和List之間進(jìn)行轉(zhuǎn)換的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05使用springMVC通過(guò)Filter實(shí)現(xiàn)防止xss注入
這篇文章主要介紹了使用springMVC通過(guò)Filter實(shí)現(xiàn)防止xss注入的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07如何讓W(xué)in10實(shí)現(xiàn)Java文件的開機(jī)自啟動(dòng)
這篇文章主要介紹了如何讓W(xué)in10實(shí)現(xiàn)Java文件的開機(jī)自啟動(dòng),對(duì)于一些想要一直運(yùn)行的Java文件,就會(huì)造成每次系統(tǒng)更新之后的重啟導(dǎo)致Java文件無(wú)法繼續(xù)運(yùn)行。,需要的朋友可以參考下2019-06-06java中使用try-catch-finally一些值得注意的事(必看)
下面小編就為大家?guī)?lái)一篇java中使用try-catch-finally一些值得注意的事(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08java中如何判斷JSONObject是否存在某個(gè)Key
這篇文章主要介紹了java中如何判斷JSONObject是否存在某個(gè)Key,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07