Java中使用LocalDate根據(jù)日期來計算年齡的實現(xiàn)方法
Java中和日期直接相關(guān)的類有很多,平時最常用到的就是java.util package下面的Date和Calendar,需要用到格式的時候還會用到j(luò)ava.text.SimpleDateFormat
首先吐槽一下,Date和Calendar實際用起來還是有一些別扭的,剛開始用的時候不熟悉,老是分不清Date和Calendar類的具體用法和區(qū)別。
而且Calendar類的set方法來設(shè)置日期時又有一些反人類,設(shè)置月份的時候總是要腦補一下減去1,比如要設(shè)置為2018年1月6日就要設(shè)置成2018,0,6,因為在這里一月是用0來表示的:
Calendar cal = Calendar.getInstance(); cal.set(2018, 0, 8);
具體的原因可以看這里的回答:StackOverflow: Why is January month 0 in Java Calendar?
反正我是不太看得下去。。
前幾天有一個簡單的需求,就是根據(jù)某兩個日期來計算出年齡。上網(wǎng)查了一下,直接拋棄了難用的Date和Calendar類,直接用java.time.LocalDate來做。話不多說直接上代碼:
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)用,代碼讀起來也特別清晰,是不是很爽!
java.time是Java 8中新引入的一個日期時間庫,下面的這些方法都是java.time包里面的。
下面來看一下這段代碼是怎么來用簡單清爽的方式計算時間差的:
首先,LocalDate是一個immutable class(不可變類),所以和String類一樣,不需要new一個新的對象才可以使用(?)
然后是LocalDate類用于設(shè)定日期的of方法:
public static LocalDate of(int year, Month month, int dayOfMonth) public static LocalDate of(int year, int month, int dayOfMonth)
of一共有三個重載的方法,這里舉出其中的兩個。第一個的Month類是一個枚舉類型,包含了月份的英文名稱,如JANUARY, NOVEMBER等
第二個就是再正常不過的設(shè)置年月日,好消息是這里的month是從1開始的,也就是說再也不用手動減去1了?。?!
下面是LocalDate類用于比較日期的until方法:
public Period until(ChronoLocalDate endDateExclusive)
這個方法返回的是一個Period類型的對象。
Period代表的是形如“2年,3個月,4天”的一段時間間隔。接下來調(diào)用的getYears方法就是屬于Period類的。
最后再來看一下Period類的一些獲取時間間隔的方法:
public int getYears() public int getMonths() public int getDays()
這三個方法分別用于獲取時間間隔的年、月和日。對,就是這么簡單。
總結(jié)
以上所述是小編給大家介紹的Java中使用LocalDate根據(jù)日期來計算年齡的實現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務(wù)
SpringBoot中的@Scheduled注解為定時任務(wù)提供了一種很簡單的實現(xiàn),本文主要介紹了SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務(wù),具有一定的參考價值,感興趣的可以了解一下2024-01-01
Eclipse 2020-06 漢化包安裝步驟詳解(附漢化包+安裝教程)
這篇文章主要介紹了Eclipse 2020-06 漢化包安裝步驟(附漢化包+安裝教程),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
idea在工具欄中顯示快速創(chuàng)建包和類的圖標(biāo)的詳細(xì)步驟
點擊需要創(chuàng)建包或者類的位置,在點擊對用的圖標(biāo)就可以快速創(chuàng)建類或者包了,下面小編給大家介紹idea在工具欄中顯示快速創(chuàng)建包和類的圖標(biāo)的詳細(xì)步驟,感興趣的朋友一起看看吧2024-02-02
Java 將Excel轉(zhuǎn)為OFD格式(方法步驟)
OFD是一種開放版式文檔是我國國家版式文檔格式標(biāo)準(zhǔn),本文通過Java后端程序代碼展示如何將Excel轉(zhuǎn)為OFD格式,分步驟給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2021-12-12
springboot整合xxl-job實現(xiàn)分布式定時任務(wù)的過程
XXL-JOB是一個分布式任務(wù)調(diào)度平臺,其核心設(shè)計目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級、易擴展,這篇文章主要介紹了springboot整合xxl-job分布式定時任務(wù),需要的朋友可以參考下2022-08-08

