一、场景

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

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. Java中int、Integer、long、Long、double、Double和BigInteger的关系

    Java中int.Integer.long.Long.double.Double和BigInteger的关系 在Java中,int.Integer.long.Long.double.Double和Bi ...

  2. Dev Express WPF GridControl 数据导出到Excel

    Dev Express WPF 给控件提供了公共的导出方法: Export to PDF Export to HTML Export to MHT Export to Text Export to C ...

  3. VSCode 如何选中包含某个字母的所有行

  4. Python3环境,树莓派使用bluepy与BLE设备通信

    扫描设备 创建一个ScanDelegate 1 class ScanDelegate(DefaultDelegate): 2 def __init__(self): 3 DefaultDelegate ...

  5. 浅谈Tox之一

    本文分享自天翼云开发者社区<浅谈Tox之一>,作者:Moonriver What is tox? tox是通用的virtualenv管理和测试命令行工具,可用于: 使用不同的Python版 ...

  6. 基于自注意力机制的轻量级人体姿态估计(Lightweight Human Pose Estimation Based on Self-Attention Mechanism)

    写在前面 本文是一篇于2023年3月21日发表在2023 International Conference on Big Data, Environmental Industry and Materi ...

  7. 近1000 star,Forest 1.5.0 正式版发布

    简介 Forest是一个高层的.极简的轻量级HTTP调用API框架. 相比于直接使用Httpclient您不再用写一大堆重复的代码了,而是像调用本地方法一样去发送HTTP请求. 不需要调用HTTP底层 ...

  8. yolov5 train报错:TypeError: expected np.ndarray (got numpy.ndarray)

    前言 mac intel 机器上,使用 yolov5 物体检测训练时报错:TypeError: expected np.ndarray (got numpy.ndarray) 这个错误信息 TypeE ...

  9. k8s Pod状态详解

    k8s Pod状态详解 在 Kubernetes 中,Pod 是最小的可部署的计算单元,它是一组容器的集合,共享同一个网络命名空间.存储卷等资源. Kubernetes 中的 Pod 有以下几种状态: ...

  10. Oracle 强行断开用户连接的方法

    1.查找目标用户的当前进程 select sid,serial# from v$session where username='test'; 2.使用上述语句会返回一个进程列表,每行有两个数字,用数字 ...