企业网站建设 阿里云,友情链接权重高的网站,做商城网站需要什么资质,汕头百度网站推广阅读建议
嗨#xff0c;伙计#xff01;刷到这篇文章咱们就是有缘人#xff0c;在阅读这篇文章前我有一些建议#xff1a;
本篇文章大概10000多字#xff0c;预计阅读时间长需要10分钟。本篇文章的实战性、理论性较强#xff0c;是一篇质量分数较高的技术干货文章…阅读建议
嗨伙计刷到这篇文章咱们就是有缘人在阅读这篇文章前我有一些建议
本篇文章大概10000多字预计阅读时间长需要10分钟。本篇文章的实战性、理论性较强是一篇质量分数较高的技术干货文章建议收藏起来方便时常学习与回顾温故而知新。创作不易免费的点赞、关注请走上一走算是对博主一些鼓励让我更有动力输出更多的干货内容。 注意
本文编写的单元测试是基于java11具体的版本号是11.0.19
TemporalAdjusters与TemporalAdjuster
TemporalAdjuster
TemporalAdjuster是Java 8中引入的新的日期时间API的一部分是一个函数式接口。它能够执行复杂的日期操作例如可以获得下一个星期日、当月的最后一天或下一年的第一天。TemporalAdjuster只有一个带Temporal对象参数的抽象方法adjustInto()可以通过向其传递Temporal对象在其任何实现中调用它。在TemporalAdjusters类中有许多预定义的实现例如LocalDate、LocalDateTime等。
FunctionalInterface
public interface TemporalAdjuster {Temporal adjustInto(Temporal temporal);
}
TemporalAdjusters
TemporalAdjusters也是Java 8中处理日期时间的工具类但它的功能和TemporalAdjuster有所不同。TemporalAdjusters是一个静态工具类提供了很多静态方法来创建TemporalAdjuster对象这些方法可以用于对日期时间进行一些常用的调整操作例如获取本月的第一天、下个月的第一天、本年的第一天或最后一天等。这些方法返回的TemporalAdjuster对象可以用于对日期时间进行相应的调整操作。
功能作用
TemporalAdjusters与TemporalAdjuster的作用在于提供了一种统一的、类型安全的方式来处理日期时间的操作。在过去的版本中Java的日期时间API主要依赖于Calendar类但这个类在处理复杂的日期时间操作时显得不够灵活和类型安全。TemporalAdjusters的出现弥补了这一缺陷使得日期时间操作更加简洁、易用和类型安全。
TemporalAdjusters的意义在于它为Java日期时间API注入了更多的活力使其更加适应现代应用程序的需求。通过TemporalAdjusters开发人员可以更方便地处理日期时间的各种操作例如添加或减去一定的时间量、获取特定时间单位的值、将日期时间转换为不同的格式等等。此外TemporalAdjusters还支持链式调用使得对日期时间的操作更加流畅和直观。
使用场景分析
TemporalAdjusters的使用场景非常广泛可以应用于各种需要调整日期时间的场景。以下是一些常见的使用场景
计算日期时间差值TemporalAdjusters提供了一组方法可以轻松地计算两个日期时间之间的差值例如计算两个日期之间的天数、小时数或分钟数等。获取特定时间单位的值使用TemporalAdjusters可以方便地获取日期时间的特定时间单位的值例如获取当前日期的年份、月份、日期等。调整日期时间TemporalAdjusters提供了一组方法可以对日期时间进行调整例如在日期上添加或减去一定的时间量、将日期时间转换为不同的格式等。解析日期时间字符串TemporalAdjusters可以用于解析日期时间字符串并将其转换为Temporal对象。这使得开发人员可以更方便地处理日期时间的字符串表示形式。时区转换TemporalAdjusters提供了一些方法可以将日期时间从一个时区转换为另一个时区。这对于国际化应用程序来说非常有用可以方便地处理不同时区之间的日期时间转换。
核心方法
TemporalAdjusters#ofDateAdjuster(...)
TemporalAdjusters.ofDateAdjuster(...) 它接受一个函数作为参数该函数接受一个日期时间对象并返回一个新的日期时间对象表示对该日期时间对象进行某种调整后的结果。这个方法返回一个TemporalAdjuster对象可以用于对日期时间对象进行相应的调整操作。通常情况下这个方法用于创建自定义的TemporalAdjuster对象以执行一些复杂的日期时间调整操作。
Test
public void test() {UnaryOperatorLocalDate unaryOperator item - item.minusDays(1);//日期调节逻辑:减去1天TemporalAdjuster temporalAdjuster TemporalAdjusters.ofDateAdjuster(unaryOperator);//构造日期调节器类LocalDate localDate1 LocalDate.of(2023, 11, 22);//日期:2023-11-22LocalDate localDate2 localDate1.with(temporalAdjuster);//执行调节逻辑,并返回调节后结果System.out.println(localDate2);//输出结果:2023-11-21
}
TemporalAdjusters#firstDayOfMonth()
TemporalAdjusters.firstDayOfMonth()是一个静态方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为本月的第一天。
这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象可以对日期进行调整。
Test
public void test1() {TemporalAdjuster temporalAdjuster TemporalAdjusters.firstDayOfMonth();LocalDateTime localDateTime LocalDateTime.of(2023, 11, 12, 13, 1, 12);LocalDateTime localDateTime1 localDateTime.with(temporalAdjuster);System.out.println(localDateTime1);//输出结果2023-11-01T13:01:12
}
TemporalAdjusters#lastDayOfMonth()
TemporalAdjusters.lastDayOfMonth()是一个静态工厂方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为本月的最后一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象可以对日期进行调整。
Test
public void test2() {TemporalAdjuster temporalAdjuster TemporalAdjusters.lastDayOfMonth();LocalDate localDate LocalDate.of(2023, 2, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-02-28
}
TemporalAdjusters#firstDayOfNextMonth()
TemporalAdjusters.firstDayOfNextMonth() 是一个静态工厂方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为下一个月的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象可以对日期进行调整。
Test
public void test3() {TemporalAdjuster temporalAdjuster TemporalAdjusters.firstDayOfNextMonth();LocalDate localDate LocalDate.of(2023, 2, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-03-01
}
TemporalAdjusters#firstDayOfYear()
TemporalAdjusters.firstDayOfYear() 是一个静态工厂方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为本年的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象可以对日期进行调整。
Test
public void test4() {TemporalAdjuster temporalAdjuster TemporalAdjusters.firstDayOfYear();LocalDate localDate LocalDate.of(2023, 2, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-01-01
}
TemporalAdjusters#lastDayOfYear()
TemporalAdjusters.lastDayOfYear() 是 一个静态工厂方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为本年的最后一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象可以对日期进行调整。
Test
public void test5() {TemporalAdjuster temporalAdjuster TemporalAdjusters.lastDayOfYear();LocalDate localDate LocalDate.of(2023, 2, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-12-31
}
TemporalAdjusters#firstDayOfNextYear()
TemporalAdjusters.firstDayOfNextYear() 是一个静态工厂方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为下一年度的第一天。这个方法返回的 TemporalAdjuster 对象可以与任何实现了 java.time.temporal.Temporal 接口的对象一起使用例如 LocalDate、LocalDateTime、ZonedDateTime 等。使用 with 方法将 TemporalAdjuster 应用于这些对象可以对日期进行调整。
Test
public void test6() {TemporalAdjuster temporalAdjuster TemporalAdjusters.firstDayOfNextYear();LocalDate localDate LocalDate.of(2023, 2, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2024-01-01
}
TemporalAdjusters#firstInMonth(...)
TemporalAdjusters.firstInMonth() 是 Java 8 中 java.time.temporal.TemporalAdjusters 类的一个静态工厂方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为本月的第一个星期几。这个方法接受一个 DayOfWeek 类型的参数用于指定要调整到的星期几。例如如果想要将日期调整为当前日期月份的第一个星期二可以这样使用
Test
public void test7() {DayOfWeek dayOfWeek DayOfWeek.of(2);TemporalAdjuster temporalAdjuster TemporalAdjusters.firstInMonth(dayOfWeek);LocalDate localDate LocalDate.of(2023, 2, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-02-07
}
TemporalAdjusters#lastInMonth(...)
TemporalAdjusters.lastInMonth() 是一个静态工厂方法用于创建一个 TemporalAdjuster 对象该对象可以用于将给定的日期调整为本月的最后一个星期几。这个方法接受一个 DayOfWeek 类型的参数用于指定要调整到的星期几。例如如果想要将日期调整为本月的最后一个星期二可以这样使用
Test
public void test8() {DayOfWeek dayOfWeek DayOfWeek.of(2);TemporalAdjuster temporalAdjuster TemporalAdjusters.lastInMonth(dayOfWeek);LocalDate localDate LocalDate.of(2023, 2, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-02-28
}
TemporalAdjusters#dayOfWeekInMonth(...)
TemporalAdjusters.dayOfWeekInMonth() 是一个静态工厂方法用于调整日期的静态方法。这个方法可以用来将给定的日期调整为指定月份中的指定星期几的日期。
这个方法接受两个参数
ordinal - 一个整数表示月份中的第几天。范围从 1月份的第一天到 28、29、30 或 31根据月份和年份而定。
dayOfWeek - 一个 DayOfWeek 枚举值表示要调整到的星期几。例如DayOfWeek.MONDAY 表示星期一。
使用这个方法你可以将日期调整到指定月份的特定星期几。例如如果你想将日期调整到 11 月的第一个星期三你可以这样使用
Test
public void test9() {DayOfWeek dayOfWeek DayOfWeek.of(3);TemporalAdjuster temporalAdjuster TemporalAdjusters.dayOfWeekInMonth(1, dayOfWeek);LocalDate localDate LocalDate.of(2023, 11, 30);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-11-01
}
TemporalAdjusters#next(...)
TemporalAdjusters.next(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法这个方法可以用来将给定的日期调整到下一个指定星期几。这个方法接受一个 DayOfWeek 参数表示要调整到的星期几。例如DayOfWeek.MONDAY 表示星期一。使用这个方法你可以将日期调整到下一个特定星期几。例如如果你想将日期调整到下一个星期日你可以这样使用
Test
public void test10() {DayOfWeek dayOfWeek DayOfWeek.SUNDAY;TemporalAdjuster temporalAdjuster TemporalAdjusters.next(dayOfWeek);LocalDate localDate LocalDate.of(2023, 12, 3);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-12-10
}
TemporalAdjusters#nextOrSame(...)
TemporalAdjusters.nextOrSame(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法这个方法可以用来将给定的日期调整到下一个或相同的星期几。这个方法接受一个 DayOfWeek 参数表示要调整到的星期几。例如DayOfWeek.MONDAY 表示星期一。
TemporalAdjusters#nextOrSame(...)与TemporalAdjusters#next(...)区别在于TemporalAdjusters.nextOrSame(DayOfWeek dayOfWeek) 方法将给定的日期调整到下一个或相同的星期几。这意味着如果给定的日期已经是星期几那么调整后的日期将与原始日期相同。否则调整后的日期将是下一个星期几。TemporalAdjusters.next(DayOfWeek dayOfWeek) 方法将给定的日期调整到下一个星期几不考虑原始日期是否已经是指定星期几。
假如当前日期是2023年11月30日星期四返回下一周星期四的日期使用TemporalAdjusters#nextOrSame(...)返回结果是2023-12-07而使用TemporalAdjusters#nextOrSame(...)返回的则是其本身2023-11-30除了这种特殊情况外其余则是等同的。
Test
public void test11() {DayOfWeek dayOfWeek DayOfWeek.of(4);TemporalAdjuster temporalAdjuster TemporalAdjusters.next(dayOfWeek);LocalDate localDate LocalDate.of(2023, 11, 30);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-12-07TemporalAdjuster temporalAdjuster1 TemporalAdjusters.nextOrSame(dayOfWeek);LocalDate localDate2 LocalDate.of(2023, 11, 30);LocalDate localDate3 localDate2.with(temporalAdjuster1);System.out.println(localDate3);//输出结果2023-11-30
}
TemporalAdjusters#previous(...)
TemporalAdjusters.previous(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法这个方法可以用来将给定的日期调整到上一个星期几。这个方法接受一个 DayOfWeek 参数表示要调整到的星期几。例如DayOfWeek.MONDAY 表示星期一。
使用这个方法你可以将日期调整到上一个或同一天的特定星期几。例如如果你想将日期调整到上一个周的星期三你可以这样使用
Test
public void test12() {DayOfWeek dayOfWeek DayOfWeek.of(3);TemporalAdjuster temporalAdjuster TemporalAdjusters.previous(dayOfWeek);LocalDate localDate LocalDate.of(2023, 11, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-10-25
}
TemporalAdjusters#previousOrSame(...)
TemporalAdjusters#previousOrSame(DayOfWeek dayOfWeek) 是一个用于调整日期的静态方法这个方法可以用来将给定的日期调整到上一个或相同的星期几。这个方法接受一个 DayOfWeek 参数表示要调整到的星期几。例如DayOfWeek.MONDAY 表示星期一。
TemporalAdjusters#previousOrSame(...)和TemporalAdjusters#previous(...)的区别与上面的TemporalAdjusters#nextOrSame(...)与TemporalAdjusters#next(...)区别是类似的不过是上面是下一周这里是上一周。
使用这个方法你可以将日期调整到上一个或同一天的特定星期几。例如如果你想将日期调整到上一个或同一天的星期三你可以这样使用
Test
public void test13() {DayOfWeek dayOfWeek DayOfWeek.of(3);TemporalAdjuster temporalAdjuster TemporalAdjusters.previous(dayOfWeek);LocalDate localDate LocalDate.of(2023, 11, 1);LocalDate localDate1 localDate.with(temporalAdjuster);System.out.println(localDate1);//输出结果2023-10-25TemporalAdjuster temporalAdjuster1 TemporalAdjusters.nextOrSame(dayOfWeek);LocalDate localDate2 LocalDate.of(2023, 11, 1);LocalDate localDate3 localDate2.with(temporalAdjuster1);System.out.println(localDate3);//输出结果2023-11-01
}