时间工具之“Java8 LocalDate 根据给定的日期,获取该日期上一周的周一周日,以及TemporalAdjusters的API”
一、场景
我们的周报需要获取该月的第一个周的星期一和星期日,用于计算该星期的功能业绩(如:上产品数量)
2022-04-25 00:00:00 到 2022-05-01 23:59:59
2022-05-02 00:00:00 到 2022-05-08 23:59:59
2022-05-09 00:00:00 到 2022-05-15 23:59:59
2022-05-16 00:00:00 到 2022-05-22 23:59:59
2022-05-23 00:00:00 到 2022-05-29 23:59:59

二、代码
@Test
public void test()
{
// LocalDate格式的:2022-04-25
LocalDate with2 = LocalDateTimeUtil.parseDate("2022-05", "yyyy-MM").with(TemporalAdjusters.firstDayOfMonth())
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
System.out.println("with2 = " + with2); // 将LocalDateTime格式转为String的yyyy-MM-dd格式 :2022-04-25T00:00 转为 2022-04-25
// previousOrSame (往前包括当天)最近星期几的日期。如最近星期五的日期,如果今天是星期五,则返回今天日期,如果今天不是星期五,则返回上周五的日期
// DayOfWeek.MONDAY 星期一
String format = LocalDateTimeUtil.parseDate("2022-05", "yyyy-MM").with(TemporalAdjusters.firstDayOfMonth())
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("format = " + format); // 将LocalDateTime格式转为String的yyyy-MM-dd格式 :2022-05-29T23:59:59.999999999 转为 2022-05-29
// lastInMonth某月的最后一个星期几
// DayOfWeek.SUNDAY 星期天
String format1 = LocalDateTimeUtil.parseDate("2022-05", "yyyy-MM")
.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY))
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("format1 = " + format1); // 获取当前周的星期天日期 2022-05-01T23:59:59.999999999
// nextOrSame (往前包括当天)最近星期几的日期。如最近星期五的日期,如果今天是星期五,则返回今天日期,如果今天不是星期五,则返回上周五的日期
LocalDateTime withQuery7 = LocalDate.of(2022, 5, 1).atTime(LocalTime.MAX).with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.out.println("with = " + withQuery7); // 获取当前周的星期一日期 2022-04-25T00:00
LocalDateTime withQuery1 = LocalDate.of(2022, 5, 1).atTime(LocalTime.MIN).with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
System.out.println("with = " + withQuery1); // 获取下一个星期天 2022-05-08T23:59:59.999999999
LocalDateTime localDateTime7 = withQuery7.plusWeeks(1);
System.out.println("localDateTime7 = " + localDateTime7); // 获取下一个星期一 2022-05-02T00:00
LocalDateTime localDateTime1 = withQuery1.plusWeeks(1);
System.out.println("localDateTime1 = " + localDateTime1); // 获取第五周星期天的月份 6
LocalDateTime localDateTime5Week = localDateTime7.plusWeeks(5);
System.out.println("localDateTime5Week = " + localDateTime5Week);
int monthValue = localDateTime5Week.getMonthValue();
System.out.println("monthValue = " + monthValue); // 获取当月最后一个星期天 2022-05-29T23:59:59.999999999
LocalDateTime with = LocalDate.of(2022, 5, 1).atTime(LocalTime.MAX)
.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
System.out.println("with = " + with); // 获取当月第一个星期一 2022-05-02T00:00
LocalDateTime with1 = LocalDate.of(2022, 5, 1).atTime(LocalTime.MIN)
.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("with1 = " + with1);
}
三、结果图

四、技术解析
①TemporalAdjusters类中预定义实现
TemporalAdjusters工具类有很多预定义的static方法返回TemporalAdjuster对象,使用不同方式调节Temporal对象而与Temporal实现无关。

包括当前:就是当前时间是星期天,2022.5.1号,就是我们需要的数据,就会返回,如果不包含的话,就会到下一个星期中,就不会是当前周内的数据了
// 获取当前周的星期天日期 2022-05-01T23:59:59.999999999
// nextOrSame (包括当天)
LocalDateTime withQuery7 = LocalDate.of(2022, 5, 1).atTime(LocalTime.MAX).with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.out.println("with = " + withQuery7); // 获取当前周的星期天日期 with = 2022-05-08T23:59:59.999999999
// next (不包括当天)
LocalDateTime withQuery2 = LocalDate.of(2022, 5, 1).atTime(LocalTime.MAX).with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println("with = " + withQuery2);
可以参考资料
https://blog.csdn.net/weixin_49114503/article/details/121676567
时间工具之“Java8 LocalDate 根据给定的日期,获取该日期上一周的周一周日,以及TemporalAdjusters的API”的更多相关文章
- Java 8——日期时间工具库(java.time)
一.前言 在介绍Java SE 8中新的日期时间库前,先了解下Java 8之前的日期时间工具的诟病. 在Java SE 8前,日期时间工具库在java.util包中,包括: java.util.Dat ...
- 【Hutool】Hutool工具类之日期时间工具——DateUtil
一.用于取代Date对象的DateTime对象 再也不用Date SimpleDateFormat Calendar之间倒腾来倒腾去了!日期创建-获取-操作一步到位! 如果JDK版本更新到了8及以上, ...
- Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,
Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在Java 8 ...
- java8时间工具类Localdate、LocaldateTime
优点: 1.方便. Date 只能是日期加时间的格式,而 LocalDate .LocalTime.LocalDateTime 分别代表日期,时间,日期+时间,非常灵活.再就是后者在日期计算及格式化方 ...
- 基于Java8的日期时间工具类DateTimeFormatter
原文:https://blog.csdn.net/qq_36596145/article/details/85331002 import java.time.Instant; import java. ...
- java8时间类API安全问题(赠送新的时间工具类哟)
LocalDateTime等新出的日期类全是final修饰的类,不能被继承,且对应的日期变量都是final修饰的,也就是不可变类.赋值一次后就不可变,不存在多线程数据问题. simpleDateFor ...
- jdk1.8 时间工具类,可以满足基本操作
时间工具类 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final S ...
- 小记Java时间工具类
小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...
- java时间工具类
在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...
- Java8 LocalDate操作时间和日期的API
时间项目中的涉及到的时间处理非常多,犹豫SimpleDateFormat的不安全性以及Calendar等类在计算时比较复杂, 往往我们都会使用工具类来封装较多的日期处理函数, 但是JDK8中新增了操作 ...
随机推荐
- 查看 OceanBase 执行计划
使用benchmarksql压测数据库,产生高消耗的sql并测试数据库性能 压测环境部署 benchmarksql下载 git clone https://github.com/meiq4096/be ...
- [计算机/硬件/GPU] 显卡
序 截至2025年,全球主流的AI大模型满血版的参数量均已突破百亿级,算力需求正以指数级飙升.特别是 DeepSeek 公司旗下的 R1 系列模型的问世,推动了很多中小企业部署私有化模型的需求. 然而 ...
- 用 solon-ai 写个简单的 deepseek 程序(构建全国产 ai 智能体应用)
用国产应用开发框架(及生态),对接国产 ai.构建全国产 ai 智能体应用. 1.先要申请个 apiKey 打开 https://www.deepseek.com 官网,申请个 apiKey .(一万 ...
- Linux - 开启FTP服务
vsftpd 一.Centos6.x配置ftp 1.1.安装OpenSSH-server OpenSSH-server包含了FTP服务,通常,CentOS6.x默认已经安装了OpenSSH-serve ...
- 【攻防世界】wife_wife
wife_wife 题目来源 攻防世界 NO.GFSJ1192 题解 本题没有源码,也没有提示,非常困难,在网上搜索此题可以看到源码.由于使用了assign(),因此存在Javascript原型链污染 ...
- 关于我第二周学习kotlin这门语言
有关kotlin的知识点: 在学习lambda之前,我们先了解一下什么是lambda,简答来说就是一小段代码块,并且我们可以将这个代码块在函数之间传递,这是函数式编程的一个重要特性. 通常我们会需要一 ...
- 题解:CF2077B Finding OR Sum
本文发布于博客园和洛谷,若您在其他平台阅读到此文,请前往博客园获得更好的阅读体验. 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18771334 ...
- React.memo 解决函数组件重复渲染
为什么会存在重复渲染? react 在 v16.8 版本引入了全新的 api,叫做 React Hooks,它的使用与以往基于 class component 的组件用法非常的不一样,不再是基于类,而 ...
- Hack The Box-代理连接及靶机-Meow-喵呜
前言 在第一层,您将获得网络安全渗透测试领域的基本技能.您将首先学习如何匿名连接到各种服务,例如 FTP.SMB.Telnet.Rsync 和 RDP.接下来,您将发现 Nmap 的强大功能,这是 ...
- Linux如何从命令行卡死的进程中退出?
Linux如何从命令行卡死的进程中退出? 不知道大家在使用Linux的时候,会不会遇到一些命令,有可能卡顿,有可能执行时间过长(比如使用 find 查找某个文件),这个时候我不想继续执行这个命令了,说 ...