时间工具之“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中新增了操作 ...
随机推荐
- 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略来了!
大家好,我是编程乐趣. DeepSeek大火,网络上也看到很多人分享本地部署心得.但想要更细了解,还是要自己本地部署一次. 我这次部署目标,就是在局域网服务器部署,并让局域网其他电脑可以直接访问. 选 ...
- [ABC213G] Connectivity 2 题解
好好好. 我们设当前处理 \(i\) 的答案,那么最后的图就可以分成两个部分:\(1\) 所在的联通块和其他,根据乘法原理,答案就是它们二者方案的乘积. 设 \(f_s\) 表示集合 \(s\) 中所 ...
- Python实现URL自动转二维码的高效方法
Python实现URL自动转二维码的高效方法 安装包依赖 pip install qrcode pip install pillow 程序 import qrcode data = "htt ...
- element-ui实现table表格的嵌套(table表格嵌套)功能实现
最近在做电商类型的官网,希望实现的布局如下:有表头和表身,所以我首先想到的就是table表格组件. 表格组件中常见的就是:标题和内容一一对应:像效果图中的效果,只用基础的表格布局是不行的,因此我想 ...
- 使用Go复刻skiplist核心功能
0.引言 正好做LC每日一题要求实现一个跳表,于是学习了redis的扩展skiplist,并使用Go进行复刻学习.学习参考了文章:Redis内部数据结构详解(6)--skiplist - 铁蕾的个人博 ...
- 【由技及道】螺蛳壳里做道场-git仓库篇-gitlab-Vs-gitea【人工智障AI2077的开发日志001】
指令接收:「开始构建代码宇宙」 系统检测:需求模糊度99.9% 启动应急协议:构建最小可行性生态圈 核心组件锁定:代码基因库(人类称之为Git仓库) 需求分析:论人类语言的艺术性 人类指令翻译机 表面 ...
- javascript 陀螺仪加摄像头可以玩出AR效果
原文链接:https://blog.jijian.link/2020-09-08/js-ar/ 重要事情说三遍 此文章中的API接口,必须放在 https 协议下测试!浏览器APP必须开启摄像头权限! ...
- GIT 基础操作-初始化
命令行说明 全局设置 git config --global user.name "" git config --global user.email "" 创建 ...
- npm淘宝镜像证书过期
前言 使用 npm 报错: npm ERR! request to https://registry.npm.taobao.org/xxx failed, reason: certificate ha ...
- Bringing machine 'default' up with 'virtualbox' provider... Your VM has become "inaccessible." Unfortunately, this is a critical error with VirtualBox that Vagrant can not cleanly recover from.
启动虚拟机报错 vagrant up Bringing machine 'default' up with 'virtualbox' provider...Your VM has become &qu ...