欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA中的日期LocalDate類詳細(xì)用法講解

 更新時(shí)間:2024年01月29日 08:59:14   作者:加洛斯  
Java中存在一個(gè)日歷表示法的類庫,LocalDate類,如果只想要指定的年月日就可以用這個(gè)LocalDate類,下面這篇文章主要給大家介紹了關(guān)于JAVA中日期LocalDate類詳細(xì)用法講解的相關(guān)資料,需要的朋友可以參考下

前言

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)文章

最新評(píng)論