网站首页 > java教程 正文
TemporalAdjusters与TemporalAdjuster的作用在于提供了一种统一的、类型安全的方式来处理日期时间的操作。在过去的版本中,Java的日期时间API主要依赖于Calendar类,但这个类在处理复杂的日期时间操作时显得不够灵活和类型安全。TemporalAdjusters的出现弥补了这一缺陷,使得日期时间操作更加简洁、易用和类型安全。
先记录一个Date与LocalDateTime的互转:
//正常的Date转LocalDateTime
LocalDateTime statusLocalDateTime = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
//LocalDateTime转LocalDate
LocalDate localDate = statusLocalDateTime.toLocalDate();
TemporalAdjuster
TemporalAdjuster是Java 8中引入的新的日期时间API的一部分,是一个函数式接口。它能够执行复杂的日期操作,例如:获取当月的最后一天、可以获得下一个星期日或者下一年的第一天等。TemporalAdjuster只有一个带Temporal对象参数的抽象方法adjustInto(),可以通过向其传递Temporal对象在其任何实现中调用它。在TemporalAdjusters类中有许多预定义的实现,例如LocalDate、LocalDateTime等。
TemporalAdjusters
TemporalAdjusters是Java 8中处理日期时间的静态工具类,提供了很多静态方法来创建TemporalAdjuster对象,这些方法可以用于对日期时间进行一些常用的调整操作。更准确来说,封装了一些TemporalAdjuster的操作信息。这些方法返回的TemporalAdjuster对象可以用于对日期时间进行相应的调整操作。
API测试
- 自定义日期操作ofDateAdjuster
它接受一个函数作为参数,该函数接受一个日期时间对象并返回一个新的日期时间对象,表示对该日期时间对象进行某种调整后的结果。这个方法返回一个TemporalAdjuster对象,可以用于对日期时间对象进行相应的调整操作。通常情况下,这个方法用于创建自定义的TemporalAdjuster对象,以执行一些复杂的日期时间调整操作。
LocalDate nextYear = LocalDate.now().with(TemporalAdjusters.ofDateAdjuster(new UnaryOperator<LocalDate>() {
@Override
public LocalDate apply(LocalDate localDate) {
return localDate.plusYears(1);
}
}));
System.out.println(nextYear);
//2025-07-31
- 获取当月的最后一天
LocalDate lastDayOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
System.out.println(lastDayOfMonth);
//2024-07-31
- 获取当月的第一天
LocalDate firstDayOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
System.out.println(lastDayOfMonth);
//2024-07-01
- 获取下个月的第一天
LocalDate localDate = LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println(localDate);
//2024-08-01
- TemporalAdjusters#next(DayOfWeek dayOfWeek)
将给定的日期调整到下一个指定星期几。这个方法接受一个 DayOfWeek 参数,表示要调整到的星期几。例如,DayOfWeek.MONDAY 表示星期一。使用这个方法,你可以将日期调整到下一个特定星期几。
LocalDate localDate = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
System.out.println(localDate);
//调整到这周五:2024-08-02
- TemporalAdjusters#nextOrSame(DayOfWeek dayOfWeek)
与TemporalAdjusters#next(...)区别在于:TemporalAdjusters.nextOrSame(...) 方法将给定的日期调整到下一个星期几,但是若指定日期与当前日期相同的话,则返回当前日期。
举个例子:
//因为我指定了日期是周三,今天刚好是周三,所以直接返回了当前日期
LocalDate localDate = LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
System.out.println(localDate);
//2024-07-31
//这个则返回了下一个星期三
LocalDate localDate = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
System.out.println(localDate);
//2024-08-07
- TemporalAdjusters#previous(DayOfWeek dayOfWeek)
与TemporalAdjusters#next(...)相反,将给定的日期调整到上一个指定星期几。
LocalDate localDate = LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.WEDNESDAY));
System.out.println(localDate);
//2024-07-24
- TemporalAdjusters#previousOrSame(DayOfWeek dayOfWeek)
与TemporalAdjusters.nextOrSame(...) 相反,将给定的日期调整到上一个星期几,但是若指定日期与当前日期相同的话,则返回当前日期。
LocalDate localDate = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.WEDNESDAY));
System.out.println(localDate);
//2024-07-31
在TemporalAdjusters中还有很多静态的方法,这里就不再一一举例了。
猜你喜欢
- 2024-10-28 JDK8 新特性之新的日期&时间API,一篇讲清楚!
- 2024-10-28 String为什么不可变(string 为什么不可变)
- 2024-10-28 四十五、Date与Calendar类在日期与时间处理中的关键作用
- 2024-10-28 深入解析Java中的String.format():格式化输出的艺术
- 2024-10-28 JAVA开发中使用Duration类设置时间长度
- 2024-10-28 DATE #4、Java操作日期时间-④.自定义时间调节器-放假通知
- 2024-10-28 Java学习笔记:String字符串格式化
- 2024-10-28 Java 计算日期属于当月第几周(日期周计算)
- 2024-10-28 GO项目实战—Gorm格式化时间字段(mongo时间格式化)
- 2024-10-28 读Java实战(第二版)笔记06_新的日期和时间API
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)