java8之TemporalAdjuster类型简介说明
下文笔者将讲述TemporalAdjuster类型的相关说明,如下所示
获得2022-08-15之后的工作日
TemporalAdjuster类型简介
java8中新引入了日期,时间库 java.time包 TemporalAdjuster类是此次引入的类之一 TemporalAdjuster类用于调整Temporal对象的策略
Temporal接口
在了解TemporalAdjuster类之前 我们先了解一下Temporal接口 Temporal可以根据实际需求表示为日期、时间或两者组合。其几个实现类包括: LocalDate:表示没有时区的日期 LocalDateTime:表示没有时区的日期和时间
TemporalAdjuster 接口
TemporalAdjuster是函数接口 在TemporalAdjusters 类中有很多预定义的实现 TemporalAdjuster仅有一个带Temporal对象参数的抽象方法adjustInto()。 TemporalAdjuster可以执行复杂的日期操作 例:可获得下一个星期日对于日期、当月的最后一天、下一年的第一天 TemporalAdjusters类中预定义实现 TemporalAdjusters类有很多预定义的static方法返回TemporalAdjuster对象 使用不同方式调节Temporal对象而与Temporal实现无关
TemporalAdjuster类中部分方法定义
dayOfWeekInMonth():一周中的某一天,例如,三月中第二个星期二 firstDayOfMonth():当前月的第一天 firstDayOfNextMonth():下一个月的第一天 firstDayOfNextYear():下一年的第一天 firstDayOfYear():当年的第一天 lastDayOfMonth():当月的最后一天 nextOrSame():下一次或当天发生的一周中的某天例:
@Test public void whenAdjust_thenNextSunday() { LocalDate localDate = LocalDate.of(2022, 08, 15); LocalDate nextSunday = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); String expected = "2022-08-15"; assertEquals(expected, nextSunday.toString()); } 获得当月的最后一天 LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
自定义TemporalAdjuster 实现
通过Temporal.with()方法获得2022-08-15之后14天的日期: @Test public void whenAdjust_thenFourteenDaysAfterDate() { LocalDate localDate = LocalDate.of(2022, 08,15); TemporalAdjuster temporalAdjuster = t ->t.plus(Period.ofDays(14)); LocalDate result = localDate.with(temporalAdjuster); String fourteenDaysAfterDate = "2022-08-29"; assertEquals(fourteenDaysAfterDate, result.toString()); }
获得2022-08-15之后的工作日
使用自定义TemporalAdjuster 实现
此处使用static工厂方法ofDateAdjuster()
static TemporalAdjuster NEXT_WORKING_DAY = TemporalAdjusters.ofDateAdjuster(date -> { DayOfWeek dayOfWeek = date.getDayOfWeek(); int daysToAdd; if (dayOfWeek == DayOfWeek.FRIDAY) daysToAdd = 3; else if (dayOfWeek == DayOfWeek.SATURDAY) daysToAdd = 2; else daysToAdd = 1; return today.plusDays(daysToAdd); }); 测试代 @Test public void test() { LocalDate localDate = LocalDate.of(2022, 08,15); TemporalAdjuster temporalAdjuster = NEXT_WORKING_DAY; LocalDate result = localDate.with(temporalAdjuster); assertEquals("2017-07-10", date.toString()); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。