JAVA中的日期LocalDate類詳細(xì)用法講解
前言
java.time.LocalDate
是Java 8引入的日期類之一,位于java.time
包中,它提供了一種簡單的方式來表示日期,不包括時間和時區(qū)信息。下面我門來解釋一下他的各種用法。
用法一:獲取當(dāng)前日期的一些信息:
LocalDate
表示一個年份、月份和日期的日期,其一般形式為:yyyy-MM-dd。例如:2023-10-11。LocalDate在JAVA中由final修飾,
是不可變的,一旦創(chuàng)建,就不能更改它的值。如果需要修改日期,可以創(chuàng)建一個新的LocalDate
對象。
1.獲取當(dāng)前日期:可以使用LocalDate.now()來獲取當(dāng)前日期。
LocalDate currentDate = LocalDate.now();//創(chuàng)建一個LocalData對象獲取當(dāng)前日期 System.out.println("當(dāng)前日期為:"+currentDate);
其輸出結(jié)果為:
當(dāng)前日期為:2023-10-11
2.除了獲取整個日期以外,還可以獲取當(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)建一個特定的日期對象
LocalDate currentDate1 = LocalDate.of(2023,10,22); System.out.println("當(dāng)前日期為:"+currentDate1);
其輸出結(jié)果為:
當(dāng)前日期為:2023-10-22
除了使用 LocalDate.of來創(chuàng)造一個特定的日期對象外,我們還可以將一個格式標(biāo)準(zhǔn)的String對象轉(zhuǎn)化為LocalData對象:LocalDate.parse ,LocalDate.parse
用于將字符串表示的日期解析為 LocalDate
對象。它允許你將字符串日期按照指定的日期格式轉(zhuǎn)換為日期對象,以便后續(xù)操作或顯示。
//創(chuàng)建一個字符串日期 String stringdata="2023-01-06"; //格式化日期規(guī)則 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //將字符串日期按照規(guī)則轉(zhuǎn)化為LocalData對象 LocalDate stringcurrentDate1= LocalDate.parse(stringdata,formatter); System.out.println("當(dāng)前日期為:"+stringcurrentDate1);
其輸出結(jié)果為:(需要注意的是:你規(guī)定的日期格式應(yīng)為:yyyy-MM-dd,你不可以寫2023-1-06,否則會拋出:java.time.format.DateTimeParseException:異常)
當(dāng)前日期為:2023-01-06
將字符串日期轉(zhuǎn)化為LocalData對象的場景多用于讀取文件中的日期,在做業(yè)務(wù)的時候經(jīng)常會從Excel、Word或者圖像識別的發(fā)票等等數(shù)據(jù)中讀取到日期,有的時候這些日期可不會是規(guī)范的形式,那么該如何解決?假如說現(xiàn)在傳遞的日期就是:2023-1-6,我們怎么轉(zhuǎn)化為LocalData對象呢?答案還是使用我們的DateTimeFormatter formatter,格式化日期,只需要將值設(shè)為yyyy-M-d即可讀取,并且如果需要的話還可以補零。
// 原始日期字符串 String originalDate = "2023-1-1"; // 將日期字符串解析為 LocalDate 對象 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的日期運算(增加或者減少指定年月日周)
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.除了對年月周日單獨操作外,我們還可以進(jìn)行統(tǒng)一的操作,比如增加一年零三個月(plus為增,minus為減)
LocalDate date = LocalDate.now(); LocalDate futureDate = date.plus(Period.of(1, 2, 0)); // 增加1年3個月 System.out.println("當(dāng) 前 日 期:"+date); //當(dāng) 前 日 期:2023-10-11 System.out.println("增加后的日期:"+futureDate);//增加后的日期:2024-12-11
用法四:獲取當(dāng)前時間所在周,月等信息的特定時間
1.獲取當(dāng)前時間所在周的第一天以及最后一天:
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)前時間所在月的第一天以及最后一天:
// 獲取當(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)前時間所在周是本年以及本月第幾周
// 獲取當(dāng)前日期 LocalDate currentDate = LocalDate.now(); // 獲取 WeekFields 對象,指定周的起始日為星期一 //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的一些簡介
TemporalAdjusters
是 Java 8 中的一個實用工具類,它提供了一些內(nèi)置的、用于日期時間調(diào)整的工具方法。這些方法允許你進(jìn)行復(fù)雜的日期時間調(diào)整操作,如獲取某月的第一天、獲取下一個星期一、獲取年底最后一天等。TemporalAdjusters
中的方法返回TemporalAdjuster
對象,這是一個函數(shù)式接口,用于在java.time
框架中進(jìn)行日期時間的調(diào)整。以下是一些常見的
TemporalAdjusters
方法及其功能:firstDayOfMonth():返回指定日期所在月份的第一天。
lastDayOfMonth():返回指定日期所在月份的最后一天。
firstDayOfNextMonth():返回指定日期下個月的第一天。
firstDayOfNextYear():返回指定日期下一年的第一天。
next(DayOfWeek dayOfWeek):返回指定日期之后的下一個星期幾。例如,
next(DayOfWeek.MONDAY)
返回下一個星期一。previous(DayOfWeek dayOfWeek):返回指定日期之前的上一個星期幾。
nextOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期幾,則返回它本身,否則返回下一個指定星期幾。
previousOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期幾,則返回它本身,否則返回上一個指定星期幾。
firstInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的第一個指定星期幾。
lastInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的最后一個指定星期幾。
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek):返回指定日期所在月份的第
ordinal
個指定星期幾。例如,dayOfWeekInMonth(2, DayOfWeek.WEDNESDAY)
返回指定日期所在月份的第二個星期三。firstDayOfYear():返回指定日期所在年份的第一天。
lastDayOfYear():返回指定日期所在年份的最后一天。
用法五:日期的比較:
1. equals() 方法:
equals() 方法用于檢查兩個 LocalDate 對象是否表示相同的日期。如果兩個對象表示相同的日期,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() 方法用于檢查一個 LocalDate 是否在另一個 LocalDate 之前。如果第一個日期在第二個日期之前,該方法返回 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() 方法用于檢查一個 LocalDate 是否在另一個 LocalDate 之后。如果第一個日期在第二個日期之后,該方法返回 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() 方法用于將兩個 LocalDate 對象進(jìn)行比較,并返回一個整數(shù)值。如果第一個日期在第二個日期之前,返回負(fù)數(shù);如果兩個日期相同,返回零;如果第一個日期在第二個日期之后,返回正數(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ù)日期來計算年齡的實現(xiàn)方法
示例1:根據(jù)出生日期和當(dāng)前日期計算年齡
這個示例將展示如何使用LocalDate來計算一個人的年齡。假設(shè)當(dāng)前日期是2021年7月31日,我們想計算一個人1995年10月24日出生時的年齡。下面是實現(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ù)生日字符串來計算年齡
這個示例將展示如何使用LocalDate來計算一個人的年齡。假設(shè)當(dāng)前日期是2021年7月31日,我們有一個包含生日的字符串“1995-10-24”,我們想計算這個人的年齡。下面是實現(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot中手動提交事務(wù)的實現(xiàn)方法
手動提交事務(wù)可以提供更靈活的控制,以便在分布式環(huán)境中處理事務(wù)的提交和回滾,本文就來介紹一下springboot中手動提交事務(wù)的實現(xiàn)方法,感興趣的可以了解一下2024-01-01http basic authentication通過post方式訪問api示例分享 basic認(rèn)證示例
在HTTP中,基本認(rèn)證是一種用來允許Web瀏覽器或其他客戶端程序在請求時提供以用戶名和口令形式的憑證,這篇文章主要介紹了http basic authentication通過post方式訪問api示例,大家參考使用吧2014-01-01springboot validator枚舉值校驗功能實現(xiàn)
這篇文章主要介紹了springboot validator枚舉值校驗功能實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01Java經(jīng)典設(shè)計模式之策略模式原理與用法詳解
這篇文章主要介紹了Java經(jīng)典設(shè)計模式之策略模式,簡單說明了策略模式的概念、原理并結(jié)合實例形式分析了java策略模式的具有用法與相關(guān)注意事項,需要的朋友可以參考下2017-08-08基于java時區(qū)轉(zhuǎn)換夏令時的問題及解決方法
下面小編就為大家分享一篇基于java時區(qū)轉(zhuǎn)換夏令時的問題及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11