java8之TemporalAdjuster类型简介说明

转自:

java8之TemporalAdjuster类型简介说明

下文笔者将讲述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());
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值