一、场景

我们的周报需要获取该月的第一个周的星期一和星期日,用于计算该星期的功能业绩(如:上产品数量)

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”的更多相关文章

  1. Java 8——日期时间工具库(java.time)

    一.前言 在介绍Java SE 8中新的日期时间库前,先了解下Java 8之前的日期时间工具的诟病. 在Java SE 8前,日期时间工具库在java.util包中,包括: java.util.Dat ...

  2. 【Hutool】Hutool工具类之日期时间工具——DateUtil

    一.用于取代Date对象的DateTime对象 再也不用Date SimpleDateFormat Calendar之间倒腾来倒腾去了!日期创建-获取-操作一步到位! 如果JDK版本更新到了8及以上, ...

  3. Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,

    Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在Java 8 ...

  4. java8时间工具类Localdate、LocaldateTime

    优点: 1.方便. Date 只能是日期加时间的格式,而 LocalDate .LocalTime.LocalDateTime 分别代表日期,时间,日期+时间,非常灵活.再就是后者在日期计算及格式化方 ...

  5. 基于Java8的日期时间工具类DateTimeFormatter

    原文:https://blog.csdn.net/qq_36596145/article/details/85331002 import java.time.Instant; import java. ...

  6. java8时间类API安全问题(赠送新的时间工具类哟)

    LocalDateTime等新出的日期类全是final修饰的类,不能被继承,且对应的日期变量都是final修饰的,也就是不可变类.赋值一次后就不可变,不存在多线程数据问题. simpleDateFor ...

  7. jdk1.8 时间工具类,可以满足基本操作

    时间工具类 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final S ...

  8. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  9. java时间工具类

    在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...

  10. Java8 LocalDate操作时间和日期的API

    时间项目中的涉及到的时间处理非常多,犹豫SimpleDateFormat的不安全性以及Calendar等类在计算时比较复杂, 往往我们都会使用工具类来封装较多的日期处理函数, 但是JDK8中新增了操作 ...

随机推荐

  1. 查看 OceanBase 执行计划

    使用benchmarksql压测数据库,产生高消耗的sql并测试数据库性能 压测环境部署 benchmarksql下载 git clone https://github.com/meiq4096/be ...

  2. [计算机/硬件/GPU] 显卡

    序 截至2025年,全球主流的AI大模型满血版的参数量均已突破百亿级,算力需求正以指数级飙升.特别是 DeepSeek 公司旗下的 R1 系列模型的问世,推动了很多中小企业部署私有化模型的需求. 然而 ...

  3. 用 solon-ai 写个简单的 deepseek 程序(构建全国产 ai 智能体应用)

    用国产应用开发框架(及生态),对接国产 ai.构建全国产 ai 智能体应用. 1.先要申请个 apiKey 打开 https://www.deepseek.com 官网,申请个 apiKey .(一万 ...

  4. Linux - 开启FTP服务

    vsftpd 一.Centos6.x配置ftp 1.1.安装OpenSSH-server OpenSSH-server包含了FTP服务,通常,CentOS6.x默认已经安装了OpenSSH-serve ...

  5. 【攻防世界】wife_wife

    wife_wife 题目来源 攻防世界 NO.GFSJ1192 题解 本题没有源码,也没有提示,非常困难,在网上搜索此题可以看到源码.由于使用了assign(),因此存在Javascript原型链污染 ...

  6. 关于我第二周学习kotlin这门语言

    有关kotlin的知识点: 在学习lambda之前,我们先了解一下什么是lambda,简答来说就是一小段代码块,并且我们可以将这个代码块在函数之间传递,这是函数式编程的一个重要特性. 通常我们会需要一 ...

  7. 题解:CF2077B Finding OR Sum

    本文发布于博客园和洛谷,若您在其他平台阅读到此文,请前往博客园获得更好的阅读体验. 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18771334 ...

  8. React.memo 解决函数组件重复渲染

    为什么会存在重复渲染? react 在 v16.8 版本引入了全新的 api,叫做 React Hooks,它的使用与以往基于 class component 的组件用法非常的不一样,不再是基于类,而 ...

  9. Hack The Box-代理连接及靶机-Meow-喵呜

    前言 ​ 在第一层,您将获得网络安全渗透测试领域的基本技能.您将首先学习如何匿名连接到各种服务,例如 FTP.SMB.Telnet.Rsync 和 RDP.接下来,您将发现 Nmap 的强大功能,这是 ...

  10. Linux如何从命令行卡死的进程中退出?

    Linux如何从命令行卡死的进程中退出? 不知道大家在使用Linux的时候,会不会遇到一些命令,有可能卡顿,有可能执行时间过长(比如使用 find 查找某个文件),这个时候我不想继续执行这个命令了,说 ...