网站首页 > 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
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)