JAVA中的日期LocalDate類詳細(xì)用法講解
前言
java.time.LocalDate
是Java 8引入的日期類之一,位于java.time
包中,它提供了一種簡(jiǎn)單的方式來表示日期,不包括時(shí)間和時(shí)區(qū)信息。下面我門來解釋一下他的各種用法。
用法一:獲取當(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()來獲取當(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)
來創(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來創(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,你不可以寫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ī)范的形式,那么該如何解決?假如說現(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-11
2.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-15
2.獲取當(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-31
3.獲取當(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í)用工具類,它提供了一些內(nèi)置的、用于日期時(shí)間調(diào)整的工具方法。這些方法允許你進(jìn)行復(fù)雜的日期時(shí)間調(diào)整操作,如獲取某月的第一天、獲取下一個(gè)星期一、獲取年底最后一天等。TemporalAdjusters
中的方法返回TemporalAdjuster
對(duì)象,這是一個(gè)函數(shù)式接口,用于在java.time
框架中進(jìn)行日期時(shí)間的調(diào)整。以下是一些常見的
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ù)日期來計(jì)算年齡的實(shí)現(xiàn)方法
示例1:根據(jù)出生日期和當(dāng)前日期計(jì)算年齡
這個(gè)示例將展示如何使用LocalDate來計(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ù)生日字符串來計(jì)算年齡
這個(gè)示例將展示如何使用LocalDate來計(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類詳細(xì)用法講解的文章就介紹到這了,更多相關(guān)JAVA日期LocalDate類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot中手動(dòng)提交事務(wù)的實(shí)現(xiàn)方法
手動(dòng)提交事務(wù)可以提供更靈活的控制,以便在分布式環(huán)境中處理事務(wù)的提交和回滾,本文就來介紹一下springboot中手動(dòng)提交事務(wù)的實(shí)現(xiàn)方法,感興趣的可以了解一下2024-01-01http basic authentication通過post方式訪問api示例分享 basic認(rèn)證示例
在HTTP中,基本認(rèn)證是一種用來允許Web瀏覽器或其他客戶端程序在請(qǐng)求時(shí)提供以用戶名和口令形式的憑證,這篇文章主要介紹了http basic authentication通過post方式訪問api示例,大家參考使用吧2014-01-01springboot validator枚舉值校驗(yàn)功能實(shí)現(xiàn)
這篇文章主要介紹了springboot validator枚舉值校驗(yàn)功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Java經(jīng)典設(shè)計(jì)模式之策略模式原理與用法詳解
這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之策略模式,簡(jiǎn)單說明了策略模式的概念、原理并結(jié)合實(shí)例形式分析了java策略模式的具有用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08基于java時(shí)區(qū)轉(zhuǎn)換夏令時(shí)的問題及解決方法
下面小編就為大家分享一篇基于java時(shí)區(qū)轉(zhuǎn)換夏令時(shí)的問題及解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11