java8之LocalDate的使用、LocalDate格式化問題
前言
Java 8里面添加了許多的新特性,其中一個(gè)最常見也是最實(shí)用的便是日期處理的類——LocalDate。
新增的日期類主要有三種:
- java.time.LocalDate ->只對(duì)年月日做出處理
- java.time.LocalTime ->只對(duì)時(shí)分秒納秒做出處理
- java.time.LocalDateTime ->同時(shí)可以處理年月日和時(shí)分秒
LocalDate:默認(rèn)返回一個(gè)日期格式為yyyy-MM-dd格式的日期
一:創(chuàng)建LocalDate
方法 | 說明 |
---|---|
static LocalDate now() | 獲取默認(rèn)時(shí)區(qū)的當(dāng)前日期,默認(rèn)返回格式y(tǒng)yyy-MM-dd |
static LocalDate now(Clock clock) | 從指定時(shí)鐘獲取當(dāng)前日期 |
static LocalDate now(ZoneId zone) | 獲取指定時(shí)區(qū)的當(dāng)前日期 |
static LocalDate of(int year, int month, int dayOfMonth) | 根據(jù)指定的年、月、日獲取LocalDate 實(shí)例 |
static LocalDate of(int year, Month month, int dayOfMonth) | 根據(jù)指定的年、月、日獲取LocalDate 實(shí)例 |
static LocalDate ofYearDay(int year,int dayOfYear) | 根據(jù)指定的年,年中的第xx天獲取LocalDate實(shí)例 |
static LocalDate ofEpochDay(long epochDay) | 從1970-01-01開始獲取指定天數(shù)的LocalDate實(shí)例 |
static LocalDate parse(CharSequence text) | 將字符串轉(zhuǎn)換為LocalDate,字符串的格式必須為yyyy-MM-dd 10位長度的日期格式,否則會(huì)報(bào)錯(cuò) |
static LocalDate parse(CharSequence text, DateTimeFormatter formatter) | 將text字符串轉(zhuǎn)換為formatter格式,text的格式必須與formatter格式一致,如text為yyyyMMdd格式,則formatter也應(yīng)該為yyyyMMdd格式,否則會(huì)報(bào)錯(cuò) |
1、now()
從默認(rèn)時(shí)區(qū)的系統(tǒng)時(shí)鐘中獲取當(dāng)前日期。默認(rèn)輸出格式為yyyy-MM-dd
LocalDate localDate = LocalDate.now(); System.out.println(localDate);
2021-11-29
2、now(Clock clock)
從指定時(shí)鐘獲取當(dāng)前日期。
LocalDate l = LocalDate.now(Clock.systemDefaultZone()); System.out.println(l); System.out.println(Clock.systemDefaultZone());//方法返回帶有系統(tǒng)默認(rèn)時(shí)區(qū)的Clock實(shí)例。 System.out.println(Clock.systemUTC());//此方法返回帶有UTC時(shí)區(qū)的Clock實(shí)例。 2021-11-29 SystemClock[Asia/Shanghai] SystemClock[Z]
3、now(ZoneId zone)
從指定時(shí)區(qū)的系統(tǒng)時(shí)鐘中獲取當(dāng)前日期。
LocalDate l = LocalDate.now(ZoneId.of("UTC+1")); System.out.println(l);
2021-11-29
時(shí)區(qū)是用ZoneId類表示的,你可以使用ZoneId.now()或ZoneId.of(“xxx”)來實(shí)例化:
ZoneId zoneId = ZoneId.of("UTC+1");
傳給of()方法的參數(shù)是時(shí)區(qū)的ID,如“UTC+1”指距離UTC(格林威治時(shí)間)有一小時(shí)的時(shí)差,你可以使用你想要的時(shí)差來表示ZoneId(如+1與-5等等)
你也可以使用另一種方式表示zone id,即使用地區(qū)名字,也是可以的:
ZoneId zoneId2 = ZoneId.of("Europe/Copenhagen"); ZoneId zoneId3 = ZoneId.of("Europe/Paris");
4、of(int year, int month, int dayOfMonth)
從年、月和日獲取LocalDate實(shí)例
LocalDate l = LocalDate.of(2021, 11, 29); System.out.println(l);
2021-11-29
5、ofYearDay(int year,int dayOfYear)
從指定年的指定天獲取LocalDate實(shí)例
//獲取2021年第230天的日期 LocalDate l = LocalDate.ofYearDay(2021, 230); System.out.println(l);
2021-08-18
6、ofEpochDay(long epochDay)
從1970-01-01開始獲取指定天數(shù)的LocalDate實(shí)例
LocalDate l = LocalDate.ofEpochDay(0);//1970-01-01 LocalDate l1 = LocalDate.ofEpochDay(-10);//1969-12-22 LocalDate l2 = LocalDate.ofEpochDay(10);//1970-01-11
7、parse(CharSequence text)
將字符串轉(zhuǎn)換為LocalDate,字符串的格式必須為yyyy-MM-dd 10位長度的日期格式,否則會(huì)報(bào)錯(cuò),字符串必須是一個(gè)合法的日期,否則會(huì)報(bào)錯(cuò)
LocalDate l = LocalDate.parse("2021-01-29"); System.out.println(l); //2021-01-29
錯(cuò)誤示例:
//日期格式非yyyy-MM-dd LocalDate l = LocalDate.parse("2021-1-29"); //日期格式非yyyy-MM-dd LocalDate l = LocalDate.parse("2021/01/29"); //字符串不是一個(gè)合法的日期,2月沒有30號(hào) LocalDate l = LocalDate.parse("2021-02-30");
若parse(CharSequence text)中傳入的格式非yyyy-MM-dd或不合法,會(huì)拋出異常,且長度需要是10位
Exception in thread "main" java.time.format.DateTimeParseException: Text '2021/11/29' could not be parsed at index 4
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.LocalDate.parse(LocalDate.java:428)
at java.base/java.time.LocalDate.parse(LocalDate.java:413)
at com.aexpec.mic.merchant.controller.Test.main(Test.java:19)
8、parse(CharSequence text, DateTimeFormatter formatter)
將text字符串轉(zhuǎn)換為formatter格式,text的格式必須與formatter格式一致,如text為yyyyMMdd格式,則formatter也應(yīng)該為yyyyMMdd格式,否則會(huì)報(bào)錯(cuò)
LocalDate l = LocalDate.parse("2021-11-29", DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDate localDate1 = LocalDate.parse("20211129", DateTimeFormatter.ofPattern("yyyyMMdd")); System.out.println(l); System.out.println(localDate1);
2021-11-29
2021-11-29
- 為什么localDate1輸出后格式為yyyy-MM-dd?
- 雖然入?yún)⒏袷綖閥yyyMMdd,但是轉(zhuǎn)換為LocalDate后,格式默認(rèn)為yyyy-MM-dd, LocalDate返回的格式默認(rèn)為yyyy-MM-dd,下面會(huì)講如何轉(zhuǎn)換為其他格式。
錯(cuò)誤示例:
//錯(cuò)誤示例:text與formatter格式不一致,會(huì)拋出異常 LocalDate l = LocalDate.parse("2021-11-29", DateTimeFormatter.ofPattern("yyyyMMdd")); LocalDate localDate1 = LocalDate.parse("20211129", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
二:LocalDate日期比較
方法 | 說明 |
---|---|
boolean isBefore(ChronoLocalDate other) | 檢查日期是否在指定日期之前 |
boolean isAfter(ChronoLocalDate other) | 檢查日期是否在指定日期之后 |
boolean isEqual(ChronoLocalDate other) | 比較日期是否相同 |
int compareTo(ChronoLocalDate other) | 日期比較localDateA.compareTo(localDateB),若相等返回0;若A>B,返回1 ;若A<B返回-1 |
1、boolean isBefore(ChronoLocalDate other)
用于檢查此LocalDate值是否在給定的ChronoLocalDate(other)之前
LocalDate l = LocalDate.parse("2021-11-29"); System.out.println(l.isBefore(LocalDate.parse("2021-11-28"))); //false System.out.println(l.isBefore(LocalDate.parse("2021-11-30"))); //true
2、boolean isAfter(ChronoLocalDate other)
用于檢查此LocalDate值是否在給定的ChronoLocalDate(other)之后
LocalDate l = LocalDate.parse("2021-11-29"); System.out.println(l.isAfter(LocalDate.parse("2021-11-28"))); //true System.out.println(l.isAfter(LocalDate.parse("2021-11-30"))); //false
3、boolean isEqual(ChronoLocalDate other)
用于檢查此LocalDate值是否與給定的ChronoLocalDate(other)相等
LocalDate l = LocalDate.parse("2021-11-29"); System.out.println(l.isEqual(LocalDate.parse("2021-11-28"))); //false System.out.println(l.isEqual(LocalDate.parse("2021-11-30"))); //false System.out.println(l.isEqual(l)); //true
4、int compareTo(ChronoLocalDate other)
比較兩個(gè)日期A.compareTo(B),若日期相同則返回0;
- 若A>B,則返回1;
- 若A<B,則返回-1;
LocalDate l = LocalDate.parse("2021-11-29"); System.out.println(l.compareTo(LocalDate.parse("2021-11-28"))); //1 System.out.println(l.compareTo(LocalDate.parse("2021-11-30"))); //-1 System.out.println(l.compareTo(l)); //0
三:獲取年、月、日
方法 | 說明 |
---|---|
int getYear() | 獲取年份 |
Month getMonth() | 使用月枚舉類型獲取月份 |
int getMonthValue() | 返回?cái)?shù)字月份 1-12月 |
int getDayOfMonth() | 獲取日期在該月是第幾天 |
DayOfWeek getDayOfWeek() | 獲取日期是星期幾 |
int getDayOfYear() | 獲取日期在該年是第幾天 |
boolean isLeapYear() | 檢查是否閏年 |
int lengthOfMonth() | 返回日期所在月份共有幾天 |
int lengthOfYear() | 返回日期所在年份共有幾天 |
long toEpochDay() | 返回當(dāng)前日期距離1970年1月1日的天數(shù) |
LocalDate localDate = LocalDate.now(); System.out.println(localDate); // 2021-11-29 System.out.println("年 : " + localDate.getYear()); // 2021 System.out.println("月(英文) : " + localDate.getMonth()); // NOVEMBER System.out.println("月(數(shù)字英文): " + localDate.getMonth().getValue()); // 11 System.out.println("月(數(shù)字英文): " + localDate.getMonthValue()); // 11 System.out.println("本月第幾天 : " + localDate.getDayOfMonth()); // 29 System.out.println("星期幾(英文) : " + localDate.getDayOfWeek()); // MONDAY System.out.println("星期幾(數(shù)字英文) : " + localDate.getDayOfWeek().getValue()); // 1 System.out.println("本年的第幾天 : " + localDate.getDayOfYear()); // 333 System.out.println("是否潤年 : " + localDate.isLeapYear()); // false System.out.println("本月天數(shù) : " + localDate.lengthOfMonth()); // 30 System.out.println("本年天數(shù) : " + localDate.lengthOfYear()); // 365
四:日期計(jì)算,加/減年、月、周、日
4.1、加/減年、月、周、日
方法 | 說明 |
---|---|
LocalDate plus(long amountToAdd, TemporalUnit unit) | 通用方法,可以通過unit參數(shù)控制增加天、周、月、年 |
LocalDate plusDays(long daysToAdd) | 返回增加了*天的LocalDate副本 |
LocalDate plusWeeks(long weeksToAdd) | 返回增加了*周的LocalDate副本 |
LocalDate plusMonths(long monthsToAdd) | 返回增加了*月的LocalDate副本 |
LocalDate plusYears(long yearsToAdd) | 返回增加了*年的LocalDate副本 |
LocalDate minus(long amountToAdd, TemporalUnit unit) | 通用方法,可以通過unit參數(shù)控制減少天、周、月、年 |
LocalDate minusDays(long daysToSubtract) | 返回減少了*天的LocalDate副本 |
LocalDate minusWeeks(long weeksToSubtract) | 返回減少了*周的LocalDate副本 |
LocalDate minusMonths(long monthsToSubtract) | 返回減少了*月的LocalDate副本 |
LocalDate minusYears(long yearsToSubtract) | 返回減少了*年的LocalDate副本 |
LocalDate localDate1 = LocalDate.now(); localDate1 = LocalDate.parse("2021-11-29"); System.out.println(localDate1); // 2021-11-29 //通用方法 System.out.println("增加 : " + localDate1.plus(1, ChronoUnit.DAYS)); System.out.println("增加天數(shù) : " + localDate1.plusDays(1)); // 2021-11-30 System.out.println("增加周數(shù) : " + localDate1.plusWeeks(1)); // 2021-12-06 System.out.println("增加月數(shù) : " + localDate1.plusMonths(1)); // 2021-12-29 System.out.println("增加年數(shù) : " + localDate1.plusYears(1)); // 2022-11-29 //通用方法 System.out.println("減少 : " + localDate1.minus(1, ChronoUnit.DAYS)); System.out.println("減少天數(shù) : " + localDate1.minusDays(1)); // 2021-11-28 System.out.println("減少月數(shù) : " + localDate1.minusMonths(1)); // 2021-10-29 System.out.println("減少周數(shù) : " + localDate1.minusWeeks(1)); // 2021-11-22 System.out.println("減少年數(shù) : " + localDate1.minusYears(1)); // 2020-11-29
以上方法返回的都是LocalDate實(shí)例的副本,即源對(duì)象localDate1變量的值不變
4.2、計(jì)算兩個(gè)日期的間隔
方法一:計(jì)算兩個(gè)日期相差的天數(shù)
- 調(diào)用LocalDate類的toEpochDay方法,返回距離1970年1月1日的long值
- 此方法只能計(jì)算兩個(gè)日期相差的天數(shù),不能計(jì)算月數(shù),年數(shù)
LocalDate start = LocalDate.of(2020,2,28); LocalDate end = LocalDate.of(2021,12,3); System.out.println("兩個(gè)時(shí)間之間的相差的天數(shù): "+(end.toEpochDay()-start.toEpochDay())); //644
方法二::計(jì)算兩個(gè)日期相差的天數(shù)、月數(shù)、年數(shù)
ChronoUnit也可以計(jì)算兩個(gè)單元之間的天數(shù)、月數(shù)或年數(shù)。
我們使用ChronoUnit類的between() 方法來執(zhí)行相同的操作:
LocalDate start = LocalDate.of(2020,2,28); LocalDate end = LocalDate.of(2021,12,3); long days= ChronoUnit.DAYS.between(start , end ); 結(jié)果:644 long month= ChronoUnit.MONTHS.between(start , end ); 結(jié)果21 long year= ChronoUnit.YEARS.between(start , end ); 結(jié)果 1
方法三: 計(jì)算兩個(gè)日期相差的年月日
此方法主要是計(jì)算兩個(gè)日期相差的年月日,不能計(jì)算出具體相差了多少天
LocalDate start = LocalDate.of(2020,2,28); LocalDate end = LocalDate.of(2021,12,3); Period period = Period.between(start,end); System.out.println("兩個(gè)時(shí)間之間的差值 年:"+period.getYears()+",月:"+period.getMonths()+",日:"+period.getDays()); 兩個(gè)時(shí)間之間的差值 年:1,月:9,日:5
五:日期格式化
方法 | 說明 |
---|---|
String format(DateTimeFormatter formatter) | 使用特定格式化形式將LocalDate轉(zhuǎn)為字符串 |
static LocalDate parse(CharSequence text) | 從文本字符串獲取LocalDate實(shí)例,text必須是yyyy-MM-dd格式 |
static LocalDate parse(CharSequence text, DateTimeFormatter formatter) | 使用特定格式化形式從文本字符串獲取LocalDate實(shí)例,text的格式必須與formatter格式一致,如text為yyyyMMdd格式,則formatter也應(yīng)該為yyyyMMdd格式,否則會(huì)報(bào)錯(cuò) |
LocalDate l = LocalDate.parse("2021-01-29"); System.out.println(l); //2021-01-29 LocalDate l1 = LocalDate.parse("2021-11-29", DateTimeFormatter.ofPattern("yyyy-MM-dd")); System.out.println(l1); //2021-11-29 LocalDate localDate1 = LocalDate.parse("20211129", DateTimeFormatter.ofPattern("yyyyMMdd")); System.out.println(localDate1); //2021-11-29 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd"); System.out.println(l.format(dtf));// 2021-01-29 十位轉(zhuǎn)八位 ==> 20210129 dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); System.out.println(l.format(dtf));// 2021-01-29 ==> 2021年01月29日 dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd"); System.out.println(l.format(dtf));// 2021-01-29 ==> 2021/01/29
六:LocalDate進(jìn)階,獲取月末、月首、本周一、下周五、每個(gè)月的周一
方法 | 說明 |
---|---|
LocalDate with(TemporalAdjuster adjuster) | 使用傳遞的TemporalAdjuster作為參數(shù)來調(diào)整此日期時(shí)間,并在調(diào)整后返回調(diào)整后的日期時(shí)間的副本 |
LocalDate with(TemporalField field, long newValue) | 用于將LocalDate的指定字段設(shè)置為新值并返回新的日期時(shí)間的副本。此方法可用于更改任何受支持的字段,例如年,月或day-of-month。如果由于不支持該字段或其他原因而無法設(shè)置新值,則會(huì)引發(fā)異常。 |
LocalDate withMonth(int month) | 修改LocalDate變量的月份,如LocalDate.parse(“2021-10-30”).withMonth(3)則為2021-03-30 month:從1到12 |
LocalDate withDayOfMonth(int dayOfMonth) | 修改LocalDate變量的日,如LocalDate.parse(“2021-10-30”).withDayOfMonth(3)則為2021-10-03 dayOfMonth:從1到28-31 |
LocalDate withDayOfYear(int dayOfYear) | 返回當(dāng)年第幾天的日期,如當(dāng)年第300天是幾月幾號(hào),dayOfYear從1到365-366 |
LocalDate withYear(int year) | 修改LocalDate變量的年份,如LocalDate.parse(“2021-10-30”).withYear(2000)則為2000-10-30 year:從MIN_YEAR到MAX_YEAR |
1、LocalDate with(TemporalAdjuster adjuster)
- 該方法用于使用傳遞的TemporalAdjuster作為參數(shù)來調(diào)整此日期時(shí)間,并在調(diào)整后返回調(diào)整后的日期時(shí)間的副本。
- 使用指定的調(diào)整器策略對(duì)象進(jìn)行調(diào)整。
- 該LocalDate實(shí)例是不可變的,不受此方法調(diào)用的影響。
參數(shù):該方法接受調(diào)節(jié)器作為要使用的調(diào)節(jié)器的參數(shù)。
返回值:該方法將基于此方法返回LocalDate并進(jìn)行調(diào)整。
異常:此方法引發(fā)以下異常:
- DateTimeException–如果無法進(jìn)行調(diào)整。
- ArithmeticException–如果發(fā)生數(shù)字溢出。
TemporalAdjuster:時(shí)間調(diào)節(jié)器
有的時(shí)候,你需要進(jìn)行一些更加靈活復(fù)雜的操作,比如,將日期調(diào)整到下個(gè)周日、下個(gè)工作日,或者是本月的最后一天。
這時(shí),就需要時(shí)間調(diào)節(jié)器 TemporalAdjuster,可以更加靈活地處理日期。
TemporalAdjusters 工具提供了一些通用的功能,并且你還可以新增你自己的功能。
方法 | 說明 |
---|---|
static TemporalAdjuster firstDayOfMonth() | 當(dāng)前月的第一天 |
static TemporalAdjuster firstDayOfNextMonth() | 下一個(gè)月的第一天 |
static TemporalAdjuster firstDayOfNextYear() | 下一年的第一天 |
static TemporalAdjuster firstDayOfYear() | 當(dāng)年的第一天 |
static TemporalAdjuster lastDayOfYear() | 當(dāng)年的最后一天 |
static TemporalAdjuster lastDayOfMonth() | 當(dāng)月的最后一天 |
static TemporalAdjuster firstInMonth(DayOfWeek dayOfWeek) | 某月的第一個(gè)星期幾 |
static TemporalAdjuster lastInMonth(DayOfWeek dayOfWeek) | 某月的最后一個(gè)星期幾 |
static TemporalAdjuster dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek) | 某月的第幾個(gè)星期幾,例如,三月中第二個(gè)星期二 |
static TemporalAdjuster next(DayOfWeek dayOfWeek) | (往后不包括當(dāng)天)下一個(gè)星期幾是幾月幾號(hào)。若當(dāng)前為周三,那么next(DayOfWeek.WEDNESDAY)指下一個(gè)周三即下周三;next(DayOfWeek.SUNDAY) 指下一個(gè)周日即本周日(此時(shí)并不是下周日) |
static TemporalAdjuster nextOrSame(DayOfWeek dayOfWeek) | (往后包括當(dāng)天)最近星期幾的日期。如最近星期五的日期,如果今天是星期五,則返回今天日期,如果今天不是星期五,則返回下周五的日期 |
static TemporalAdjuster previous(DayOfWeek dayOfWeek) | (往前不包括當(dāng)天)上一個(gè)星期幾是幾月幾號(hào)。若當(dāng)前為周三,那么previous(DayOfWeek.WEDNESDAY)指上一個(gè)周三即上周三;previous(DayOfWeek.TUESDAY) 指上一個(gè)周二即昨天(此時(shí)并不是上周二) |
static TemporalAdjuster previousOrSame(DayOfWeek dayOfWeek) | (往前包括當(dāng)天)最近星期幾的日期。如最近星期五的日期,如果今天是星期五,則返回今天日期,如果今天不是星期五,則返回上周五的日期 |
LocalDate now = LocalDate.now(); System.out.println("當(dāng)前時(shí)間:"+now); //2021-11-30 //獲取當(dāng)月第一天 System.out.println("當(dāng)月第一天:"+now.with(TemporalAdjusters.firstDayOfMonth()));// 2021-11-01 //獲取本月第2天: System.out.println("本月第2天:"+now.withDayOfMonth(2)); //2021-11-02 //獲取下月第一天 System.out.println("下月第一天:"+now.with(TemporalAdjusters.firstDayOfNextMonth())); //2021-12-01 //獲取明年第一天 System.out.println("明年第一天:"+now.with(TemporalAdjusters.firstDayOfNextYear())); //2022-01-01 //獲取本年第一天 System.out.println("本年第一天:"+now.with(TemporalAdjusters.firstDayOfYear()));//2021-01-01 //獲取當(dāng)月最后一天,再也不用計(jì)算是28,29,30還是31: System.out.println("當(dāng)月最后一天:"+now.with(TemporalAdjusters.lastDayOfMonth())); //2021-11-30 //獲取本年最后一天 System.out.println("本年最后一天:"+now.with(TemporalAdjusters.lastDayOfYear())); //2021-12-31 //獲取當(dāng)月的第一個(gè)星期一 System.out.println("當(dāng)月的第一個(gè)星期一:"+now.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY))); //2021-11-01 //獲取當(dāng)月的最后一個(gè)星期一 System.out.println("當(dāng)月的最后一個(gè)星期一:"+now.with(TemporalAdjusters.lastInMonth(DayOfWeek.MONDAY))); //2021-11-29 //獲取當(dāng)月第三周星期五 System.out.println("當(dāng)月第三周星期五:"+now.with(TemporalAdjusters.dayOfWeekInMonth(3, DayOfWeek.FRIDAY))); //2021-11-19 //獲取本周一 System.out.println("本周一:"+now.with(DayOfWeek.MONDAY)); //2021-11-29 //獲取上周二 System.out.println("上周二:"+now.minusWeeks(1).with(ChronoField.DAY_OF_WEEK, 2)); //2021-11-23 //(往前不包括當(dāng)天)獲取當(dāng)前日期的上一個(gè)周一 如果今天是周一,則返回上周一 System.out.println("上一個(gè)周一(不包括當(dāng)天):"+now.with(TemporalAdjusters.previous(DayOfWeek.MONDAY))); //2021-11-29 //(往前包括當(dāng)天)最近星期五的日期 如果今天是星期五,則返回今天日期 System.out.println("上一個(gè)周一(包括當(dāng)天):"+now.with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY))); //2021-11-26 //獲取下周二 System.out.println("下周二:"+now.plusWeeks(1).with(ChronoField.DAY_OF_WEEK, 2)); //2021-12-07 //(往后不包括當(dāng)天)獲取當(dāng)前日期的下一個(gè)周日 如果今天是周日,則返回下周日的時(shí)間 如果今天是星期一,則返回本周日的時(shí)間 System.out.println("下一個(gè)周日(不包括當(dāng)天):"+now.with(TemporalAdjusters.next(DayOfWeek.SUNDAY))); //2021-12-05 //(往后包括當(dāng)天)最近星期五的日期 如果今天是星期五,則返回今天日期 System.out.println("下一個(gè)周日(包括當(dāng)天):"+now.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY))); //2021-12-03
七:LocalDateTime與Date的互轉(zhuǎn)
/** * Date轉(zhuǎn)LocalDateTime * @param date Date * @return LocalDateTime */ public static LocalDateTime dateToLocalDateTime(Date date) { Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); return instant.atZone(zoneId).toLocalDateTime(); } /** * LocalDateTime轉(zhuǎn)Date * @param localDateTime LocalDateTime * @return Date */ public static Date localDateTimeToDate(LocalDateTime localDateTime) { ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zdt = localDateTime.atZone(zoneId); return Date.from(zdt.toInstant()); }
參考:
LocalDate官方apihttps://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java自定義驗(yàn)證器的實(shí)現(xiàn)示例
在對(duì)外暴露接口中,我們通常會(huì)對(duì)入?yún)⑦M(jìn)行驗(yàn)證,比如一些字符串非空判斷等,本文主要介紹了java自定義驗(yàn)證器的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Java中JavaBean對(duì)象和Map的互相轉(zhuǎn)換方法實(shí)例
為什么需要將javaBean和map進(jìn)行轉(zhuǎn)換,在很多應(yīng)用場(chǎng)景中,需要將key=value形式的數(shù)據(jù)與javaBean對(duì)象相互轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Java中JavaBean對(duì)象和Map的互相轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2022-11-11解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn)
這篇文章主要介紹了解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Springboot內(nèi)置的工具類之CollectionUtils示例講解
這篇文章主要介紹了Springboot內(nèi)置的工具類之CollectionUtils,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12AQS(AbstractQueuedSynchronizer)抽象隊(duì)列同步器及工作原理解析
AQS是用來構(gòu)建鎖或者其他同步器組件的重量級(jí)基礎(chǔ)框架及整個(gè)JUC體系的基石,通過內(nèi)置的FIFO對(duì)列來完成資源獲取線程的排隊(duì)工作,并通過一個(gè)int類型變量表示持有鎖的狀態(tài),本文給大家詳細(xì)介紹下AQS抽象隊(duì)列同步器的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-03-03