java8之TemporalAdjuster类型简介说明

书欣 Java教程 发布时间:2022-08-13 22:40:19 阅读数:17048 1
下文笔者将讲述TemporalAdjuster类型的相关说明,如下所示

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());
}
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202208/4221.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者