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());
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


