JAVA中的日期LocalDate類(lèi)詳細(xì)用法講解
前言
java.time.LocalDate是Java 8引入的日期類(lèi)之一,位于java.time包中,它提供了一種簡(jiǎn)單的方式來(lái)表示日期,不包括時(shí)間和時(shí)區(qū)信息。下面我門(mén)來(lái)解釋一下他的各種用法。
用法一:獲取當(dāng)前日期的一些信息:
LocalDate表示一個(gè)年份、月份和日期的日期,其一般形式為:yyyy-MM-dd。例如:2023-10-11。LocalDate在JAVA中由final修飾,是不可變的,一旦創(chuàng)建,就不能更改它的值。如果需要修改日期,可以創(chuàng)建一個(gè)新的LocalDate對(duì)象。
1.獲取當(dāng)前日期:可以使用LocalDate.now()來(lái)獲取當(dāng)前日期。
LocalDate currentDate = LocalDate.now();//創(chuàng)建一個(gè)LocalData對(duì)象獲取當(dāng)前日期
System.out.println("當(dāng)前日期為:"+currentDate);其輸出結(jié)果為:
當(dāng)前日期為:2023-10-11
2.除了獲取整個(gè)日期以外,還可以獲取當(dāng)前的年份、月份、天等基礎(chǔ)信息
// 獲取當(dāng)前日期
LocalDate currentDate = LocalDate.now();
// 獲取年份
int year = currentDate.getYear();
// 獲取月份
Month month = currentDate.getMonth();
// 獲取日
int day = currentDate.getDayOfMonth();
System.out.println("年份: " + year);
System.out.println("月份: " + month);
System.out.println("日: " + day);其輸出結(jié)果為:(如果想要獲取以int形式的月份可以使用:int monthValue = currentDate.getMonthValue();)
年份: 2023
月份: OCTOBER
日: 11
3.獲取星期幾,獲取日期在年份中的第幾天,獲取日期所在月份的天數(shù),獲取日期所在年份的天數(shù)以及檢查日期所在年份是否為閏年
LocalDate currentDate = LocalDate.now();
// 獲取星期幾枚舉值
DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
// 獲取日期在年份中的第幾天
int dayOfYear = currentDate.getDayOfYear();
// 檢查日期所在年份是否為閏年
boolean isLeapYear = currentDate.isLeapYear();
// 獲取日期所在月份的天數(shù)
int daysInMonth = currentDate.lengthOfMonth();
// 獲取日期所在年份的天數(shù)
int daysInYear = currentDate.lengthOfYear();
// 獲取星期幾的整數(shù)值
int dayOfWeekValue = currentDate.getDayOfWeek().getValue();
System.out.println("當(dāng)前日期: " + currentDate); //當(dāng)前日期: 2023-10-11
System.out.println("今天是星期 " + dayOfWeekValue); //今天是星期 3
System.out.println("星期幾: " + dayOfWeek); //星期幾: WEDNESDAY
System.out.println("日期在年份中的第幾天: " + dayOfYear); //日期在年份中的第幾天: 284
System.out.println("是否為閏年: " + isLeapYear); //是否為閏年: false
System.out.println("當(dāng)前月份的天數(shù): " + daysInMonth); //當(dāng)前月份的天數(shù): 31
System.out.println("當(dāng)前年份的天數(shù): " + daysInYear); //當(dāng)前年份的天數(shù): 365用法二:創(chuàng)建特定的日期: LocalDate.of、LocalDate.parse
可以使用LocalDate.of(year, month, day)來(lái)創(chuàng)建一個(gè)特定的日期對(duì)象
LocalDate currentDate1 = LocalDate.of(2023,10,22);
System.out.println("當(dāng)前日期為:"+currentDate1);其輸出結(jié)果為:
當(dāng)前日期為:2023-10-22
除了使用 LocalDate.of來(lái)創(chuàng)造一個(gè)特定的日期對(duì)象外,我們還可以將一個(gè)格式標(biāo)準(zhǔn)的String對(duì)象轉(zhuǎn)化為L(zhǎng)ocalData對(duì)象:LocalDate.parse ,LocalDate.parse用于將字符串表示的日期解析為 LocalDate 對(duì)象。它允許你將字符串日期按照指定的日期格式轉(zhuǎn)換為日期對(duì)象,以便后續(xù)操作或顯示。
//創(chuàng)建一個(gè)字符串日期
String stringdata="2023-01-06";
//格式化日期規(guī)則
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//將字符串日期按照規(guī)則轉(zhuǎn)化為L(zhǎng)ocalData對(duì)象
LocalDate stringcurrentDate1= LocalDate.parse(stringdata,formatter);
System.out.println("當(dāng)前日期為:"+stringcurrentDate1);其輸出結(jié)果為:(需要注意的是:你規(guī)定的日期格式應(yīng)為:yyyy-MM-dd,你不可以寫(xiě)2023-1-06,否則會(huì)拋出:java.time.format.DateTimeParseException:異常)
當(dāng)前日期為:2023-01-06
將字符串日期轉(zhuǎn)化為L(zhǎng)ocalData對(duì)象的場(chǎng)景多用于讀取文件中的日期,在做業(yè)務(wù)的時(shí)候經(jīng)常會(huì)從Excel、Word或者圖像識(shí)別的發(fā)票等等數(shù)據(jù)中讀取到日期,有的時(shí)候這些日期可不會(huì)是規(guī)范的形式,那么該如何解決?假如說(shuō)現(xiàn)在傳遞的日期就是:2023-1-6,我們?cè)趺崔D(zhuǎn)化為L(zhǎng)ocalData對(duì)象呢?答案還是使用我們的DateTimeFormatter formatter,格式化日期,只需要將值設(shè)為yyyy-M-d即可讀取,并且如果需要的話還可以補(bǔ)零。
// 原始日期字符串
String originalDate = "2023-1-1";
// 將日期字符串解析為 LocalDate 對(duì)象
LocalDate date = LocalDate.parse(originalDate, DateTimeFormatter.ofPattern("yyyy-M-d"));
System.out.println("格式化前的日期:" + originalDate);
// 使用 DateTimeFormatter 格式化日期,指定月份和日期部分的寬度為兩位
String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("格式化后的日期:" + formattedDate);其輸出結(jié)果為:
格式化前的日期:2023-1-1
格式化后的日期:2023-01-01
用法三:LocalDate的日期運(yùn)算(增加或者減少指定年月日周)
1.plusYears(long years), minusYears(long years):增加或減少指定年數(shù)。
LocalDate date = LocalDate.now();
LocalDate futureDate = date.plusYears(2); // 增加2年
LocalDate pastDate = date.minusYears(1); // 減少1年
System.out.println("增加后的年數(shù):"+futureDate);//增加后的年數(shù):2025-10-11
System.out.println("減少后的年數(shù):"+pastDate);//減少后的年數(shù):2022-10-112.plusMonths(long months), minusMonths(long months):增加或減少指定月數(shù)。
3.plusWeeks(long weeks), minusWeeks(long weeks):增加或減少指定周數(shù)。
4.plusDays(long days), minusDays(long days):增加或減少指定天數(shù)。(函數(shù)形式一樣,所以月周天不做代碼展示了)
5.除了對(duì)年月周日單獨(dú)操作外,我們還可以進(jìn)行統(tǒng)一的操作,比如增加一年零三個(gè)月(plus為增,minus為減)
LocalDate date = LocalDate.now();
LocalDate futureDate = date.plus(Period.of(1, 2, 0)); // 增加1年3個(gè)月
System.out.println("當(dāng) 前 日 期:"+date); //當(dāng) 前 日 期:2023-10-11
System.out.println("增加后的日期:"+futureDate);//增加后的日期:2024-12-11用法四:獲取當(dāng)前時(shí)間所在周,月等信息的特定時(shí)間
1.獲取當(dāng)前時(shí)間所在周的第一天以及最后一天:
LocalDate currentDate = LocalDate.now();
// 獲取當(dāng)前周的第一天(星期一)
LocalDate firstDayOfWeek = currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 獲取當(dāng)前周的最后一天(星期日)
LocalDate lastDayOfWeek = currentDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.out.println("本周第一天: " + firstDayOfWeek); //本周第一天: 2023-10-09
System.out.println("本周最后一天: " + lastDayOfWeek);//本周最后一天: 2023-10-152.獲取當(dāng)前時(shí)間所在月的第一天以及最后一天:
// 獲取當(dāng)前日期
LocalDate currentDate = LocalDate.now();
// 獲取當(dāng)前月的第一天
LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth());
// 獲取當(dāng)前月的最后一天
LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("本月第一天: " + firstDayOfMonth); //本月第一天: 2023-10-01
System.out.println("本月最后一天: " + lastDayOfMonth);//本月最后一天: 2023-10-313.獲取當(dāng)前時(shí)間所在周是本年以及本月第幾周
// 獲取當(dāng)前日期
LocalDate currentDate = LocalDate.now();
// 獲取 WeekFields 對(duì)象,指定周的起始日為星期一
//4 指定了星期四作為一年中的第一天。這影響了一年中的第一周是如何定義的。在這種定義下,一年中的第一周將包含星期四
// 因此星期四所在的周將被視為第一周,直到下一年的星期四。
WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY,4);
// 獲取當(dāng)前日期所在周是本月的第幾周
int weekOfMonth = currentDate.get(weekFields.weekOfMonth());
// 獲取當(dāng)前日期所在周是本年的第幾周
int weekOfYear = currentDate.get(weekFields.weekOfWeekBasedYear());
System.out.println("當(dāng)前日期所在周是本月的第 " + weekOfMonth + " 周");
System.out.println("當(dāng)前日期所在周是本年的第 " + weekOfYear + " 周");關(guān)于TemporalAdjusters的一些簡(jiǎn)介
TemporalAdjusters是 Java 8 中的一個(gè)實(shí)用工具類(lèi),它提供了一些內(nèi)置的、用于日期時(shí)間調(diào)整的工具方法。這些方法允許你進(jìn)行復(fù)雜的日期時(shí)間調(diào)整操作,如獲取某月的第一天、獲取下一個(gè)星期一、獲取年底最后一天等。TemporalAdjusters中的方法返回TemporalAdjuster對(duì)象,這是一個(gè)函數(shù)式接口,用于在java.time框架中進(jìn)行日期時(shí)間的調(diào)整。以下是一些常見(jiàn)的
TemporalAdjusters方法及其功能:firstDayOfMonth():返回指定日期所在月份的第一天。
lastDayOfMonth():返回指定日期所在月份的最后一天。
firstDayOfNextMonth():返回指定日期下個(gè)月的第一天。
firstDayOfNextYear():返回指定日期下一年的第一天。
next(DayOfWeek dayOfWeek):返回指定日期之后的下一個(gè)星期幾。例如,
next(DayOfWeek.MONDAY)返回下一個(gè)星期一。previous(DayOfWeek dayOfWeek):返回指定日期之前的上一個(gè)星期幾。
nextOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期幾,則返回它本身,否則返回下一個(gè)指定星期幾。
previousOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期幾,則返回它本身,否則返回上一個(gè)指定星期幾。
firstInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的第一個(gè)指定星期幾。
lastInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的最后一個(gè)指定星期幾。
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek):返回指定日期所在月份的第
ordinal個(gè)指定星期幾。例如,dayOfWeekInMonth(2, DayOfWeek.WEDNESDAY)返回指定日期所在月份的第二個(gè)星期三。firstDayOfYear():返回指定日期所在年份的第一天。
lastDayOfYear():返回指定日期所在年份的最后一天。
用法五:日期的比較:
1. equals() 方法:
equals() 方法用于檢查兩個(gè) LocalDate 對(duì)象是否表示相同的日期。如果兩個(gè)對(duì)象表示相同的日期,equals() 方法將返回 true,否則返回 false。
LocalDate date1 = LocalDate.of(2023, 5, 15); LocalDate date2 = LocalDate.of(2023, 5, 15); LocalDate date3 = LocalDate.of(2023, 5, 16); boolean areEqual = date1.equals(date2); // 返回 true boolean areEqual2 = date1.equals(date3); // 返回 false
2.isBefore() 方法:
isBefore() 方法用于檢查一個(gè) LocalDate 是否在另一個(gè) LocalDate 之前。如果第一個(gè)日期在第二個(gè)日期之前,該方法返回 true,否則返回 false。
LocalDate date1 = LocalDate.of(2023, 5, 15); LocalDate date2 = LocalDate.of(2023, 5, 20); boolean isBefore = date1.isBefore(date2); // 返回 true boolean isBefore2 = date2.isBefore(date1); // 返回 false
3.isAfter() 方法:
isAfter() 方法用于檢查一個(gè) LocalDate 是否在另一個(gè) LocalDate 之后。如果第一個(gè)日期在第二個(gè)日期之后,該方法返回 true,否則返回 false。
LocalDate date1 = LocalDate.of(2023, 5, 15); LocalDate date2 = LocalDate.of(2023, 5, 10); boolean isAfter = date1.isAfter(date2); // 返回 true
4.compareTo() 方法:
compareTo() 方法用于將兩個(gè) LocalDate 對(duì)象進(jìn)行比較,并返回一個(gè)整數(shù)值。如果第一個(gè)日期在第二個(gè)日期之前,返回負(fù)數(shù);如果兩個(gè)日期相同,返回零;如果第一個(gè)日期在第二個(gè)日期之后,返回正數(shù)。
LocalDate date1 = LocalDate.of(2023, 5, 15); LocalDate date2 = LocalDate.of(2023, 5, 20); int result = date1.compareTo(date2); // 返回-5 int result2 = date2.compareTo(date1); // 返回5
附:Java中使用LocalDate根據(jù)日期來(lái)計(jì)算年齡的實(shí)現(xiàn)方法
示例1:根據(jù)出生日期和當(dāng)前日期計(jì)算年齡
這個(gè)示例將展示如何使用LocalDate來(lái)計(jì)算一個(gè)人的年齡。假設(shè)當(dāng)前日期是2021年7月31日,我們想計(jì)算一個(gè)人1995年10月24日出生時(shí)的年齡。下面是實(shí)現(xiàn)方法的代碼,其中代碼塊中的“xxxx-xx-xx”部分需要替換成具體的年月日:
LocalDate birthDate = LocalDate.of(1995, Month.OCTOBER, 24);
LocalDate currentDate = LocalDate.now();
int age = Period.between(birthDate, currentDate).getYears();
System.out.println("Age: " + age);
輸出結(jié)果為:
Age: 25
示例2:根據(jù)生日字符串來(lái)計(jì)算年齡
這個(gè)示例將展示如何使用LocalDate來(lái)計(jì)算一個(gè)人的年齡。假設(shè)當(dāng)前日期是2021年7月31日,我們有一個(gè)包含生日的字符串“1995-10-24”,我們想計(jì)算這個(gè)人的年齡。下面是實(shí)現(xiàn)方法的代碼:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate birthDate = LocalDate.parse("1995-10-24", formatter);
LocalDate currentDate = LocalDate.now();
int age = Period.between(birthDate, currentDate).getYears();
System.out.println("Age: " + age);
輸出結(jié)果為:
Age: 25
總結(jié)
到此這篇關(guān)于JAVA中日期LocalDate類(lèi)詳細(xì)用法講解的文章就介紹到這了,更多相關(guān)JAVA日期LocalDate類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot中手動(dòng)提交事務(wù)的實(shí)現(xiàn)方法
手動(dòng)提交事務(wù)可以提供更靈活的控制,以便在分布式環(huán)境中處理事務(wù)的提交和回滾,本文就來(lái)介紹一下springboot中手動(dòng)提交事務(wù)的實(shí)現(xiàn)方法,感興趣的可以了解一下2024-01-01
http basic authentication通過(guò)post方式訪問(wèn)api示例分享 basic認(rèn)證示例
在HTTP中,基本認(rèn)證是一種用來(lái)允許Web瀏覽器或其他客戶端程序在請(qǐng)求時(shí)提供以用戶名和口令形式的憑證,這篇文章主要介紹了http basic authentication通過(guò)post方式訪問(wèn)api示例,大家參考使用吧2014-01-01
springboot validator枚舉值校驗(yàn)功能實(shí)現(xiàn)
這篇文章主要介紹了springboot validator枚舉值校驗(yàn)功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Java經(jīng)典設(shè)計(jì)模式之策略模式原理與用法詳解
這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之策略模式,簡(jiǎn)單說(shuō)明了策略模式的概念、原理并結(jié)合實(shí)例形式分析了java策略模式的具有用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08
劍指Offer之Java算法習(xí)題精講二叉樹(shù)專(zhuān)題篇下
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03
基于java時(shí)區(qū)轉(zhuǎn)換夏令時(shí)的問(wèn)題及解決方法
下面小編就為大家分享一篇基于java時(shí)區(qū)轉(zhuǎn)換夏令時(shí)的問(wèn)題及解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11

