网站首页 > java教程 正文
2.5.时间调节器 TemporalAdjuster
时间调节器设计思想,就是输入一个日期,根据定义规则,返回一个符合规则的日期,
@FunctionalInterface
public interface TemporalAdjuster {
//接受一个Temporal类型的对象,(所有的日期对象都实现了该接口)
//意思接受一个日期对象,按规则修改后返回另一个日期对象
Temporal adjustInto(Temporal temporal);
}
比如修改当月时间为本月一号:
LocalDate localDate = LocalDate.now();
//修改为本月一号
LocalDate modifyDate = localDate.with(TemporalAdjusters.firstDayOfMonth());
log.debug("修改本月一号:{}",modifyDate);
设计一个劳动节放假通知的自定义时间调节器:
/**
* @version 1.0.0
* @RESTful:Create-post Read-get update-put/path delete-delete
* @package: com.devzl.poi.word.date.java.time
* @ClassName: DragonBoat.java
* @author: L.Z QQ.191288065@qq.com
* @Description 劳动节放假时间每年的五月一日是国际劳动节
* 调整:
* 1.如果放假时间不是周五,则时间调整到上一个周五开始放假
* @createTime 2021年06月17日 00:12:00
*/
public class LaborDayAdjuster implements TemporalAdjuster {
@Override
public Temporal adjustInto(Temporal temporal) {
//1.Temporal是所有日期的父接口,则可以转换为LocalDate日期对象
LocalDate localDate = LocalDate.from(temporal);
//判断当前日期对象是否1号,不是,则修改日期
int currentDay = localDate.getDayOfMonth();
LocalDate realHoliday = localDate;
if(currentDay != 1){
realHoliday = localDate.withDayOfMonth(1);
}
//不是周五,那么放假日修改为上一周的周五
if(!realHoliday.getDayOfWeek().equals(DayOfWeek.FRIDAY)){
return realHoliday.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
} else {
return realHoliday;
}
}
}
测试使用:
@Test
public void test_TemporalAdjuster() {
//1.封装劳动节日:5.1
LocalDate laborDay = LocalDate.of(2021, 5, 1);
//2.计算正确的放假日
LocalDate realHoliday = LocalDate.from(new LaborDayAdjuster().adjustInto(laborDay));
log.debug("2021年劳动节放假通知:与{}开始放假,{}开始上班",realHoliday,realHoliday.plusDays(3));
}
//00:50:46.438 [main] - 2021年放假通知:与2021-04-30开始放假,2021-05-03开始上班
这样就达到我们的调休放假的目标:2021年放假通知:与2021-04-30开始放假,2021-05-03开始上班
猜你喜欢
- 2024-10-28 JDK8 新特性之新的日期&时间API,一篇讲清楚!
- 2024-10-28 日期时间API之TemporalAdjusters与TemporalAdjuster
- 2024-10-28 String为什么不可变(string 为什么不可变)
- 2024-10-28 四十五、Date与Calendar类在日期与时间处理中的关键作用
- 2024-10-28 深入解析Java中的String.format():格式化输出的艺术
- 2024-10-28 JAVA开发中使用Duration类设置时间长度
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)