1.第一种情况,从1号开始到月份最后一天结束


代码如下:

private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");public List<Map> getScope() {String date = "2022-06-01";String timeStrs[] = date.split("-");Calendar c = Calendar.getInstance();c.set(Calendar.YEAR, Integer.parseInt(timeStrs[0]));c.set(Calendar.MONTH, Integer.parseInt(timeStrs[1]) - 1);c.setFirstDayOfWeek(Calendar.MONDAY);int weeks = c.getActualMaximum(Calendar.WEEK_OF_MONTH);LocalDate localDateate = LocalDate.parse(date, dateTimeFormatter);//月份第一周的起始时间和结束时间LocalDate firstDay = localDateate.with(TemporalAdjusters.firstDayOfMonth());String firstDayStr = firstDay.format(dateTimeFormatter);String sunStr = getSunOfWeek(firstDayStr);List<Map> weekInfos = new ArrayList<>();for (int i = 1; i <= weeks; i++) {Map weekInfo = new HashMap();//第一周的起始时间就是当月的1号,结束时间就是周日if (i == 1) {weekInfo.put("start",firstDayStr);weekInfo.put("end",sunStr);weekInfo.put("order",i);//计算接下来每周的周一和周日} else if (i < weeks) {//由于sunStr是上一周的周日,所以取周一要取sunStr的下一周的周一String monDay = getLastMonOfWeek(sunStr);sunStr = getSunOfWeek(monDay);weekInfo.put("start",monDay);weekInfo.put("end",sunStr);weekInfo.put("order",i);//由于最后一周可能结束时间不是周日,所以要单独处理} else {String monDay = getLastMonOfWeek(sunStr);//结束时间肯定就是当前月的最后一天LocalDate lastDay = localDateate.with(TemporalAdjusters.lastDayOfMonth());String endDay = lastDay.format(dateTimeFormatter);weekInfo.put("start",monDay);weekInfo.put("end",endDay);weekInfo.put("order",i);}weekInfos.add(weekInfo);}return weekInfos;}//算出所在周的周日public String getSunOfWeek(String time) {LocalDate localDateate = LocalDate.parse(time, dateTimeFormatter);LocalDate endday = localDateate.with(TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).minusDays(1);String endDayStr = endday.format(dateTimeFormatter);return endDayStr;}//下一周的周一public String getLastMonOfWeek(String time) {LocalDate localDateate = LocalDate.parse(time, dateTimeFormatter);LocalDate endday = localDateate.with(TemporalAdjusters.next(java.time.DayOfWeek.MONDAY));String endDayStr = endday.format(dateTimeFormatter);return endDayStr;}

运行结果:

2.第二种情况,每周固定从周一开始到周天结束


代码如下:

 private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");public List<Map> getScope() {String date = "2022-06-01";String timeStrs[] = date.split("-");Calendar c = Calendar.getInstance();c.set(Calendar.YEAR, Integer.parseInt(timeStrs[0]));c.set(Calendar.MONTH, Integer.parseInt(timeStrs[1]) - 1);c.setFirstDayOfWeek(Calendar.MONDAY);int weeks = c.getActualMaximum(Calendar.WEEK_OF_MONTH);LocalDate localDateate = LocalDate.parse(date, dateTimeFormatter);//月份第一周的起始时间和结束时间LocalDate firstDay = localDateate.with(java.time.DayOfWeek.MONDAY);String firstDayStr = firstDay.format(dateTimeFormatter);String sunStr = getSunOfWeek(firstDayStr);List<Map> weekInfos = new ArrayList<>();for (int i = 1; i <= weeks; i++) {Map weekInfo = new HashMap();//第一周的起始时间就是当月的1号,结束时间就是周日if (i == 1) {weekInfo.put("start",firstDayStr);weekInfo.put("end",sunStr);weekInfo.put("order",i);//计算接下来每周的周一和周日} else {//由于sunStr是上一周的周日,所以取周一要取sunStr的下一周的周一String monDay = getLastMonOfWeek(sunStr);sunStr = getSunOfWeek(monDay);weekInfo.put("start",monDay);weekInfo.put("end",sunStr);weekInfo.put("order",i);}weekInfos.add(weekInfo);}return weekInfos;}//算出所在周的周日public String getSunOfWeek(String time) {LocalDate localDateate = LocalDate.parse(time, dateTimeFormatter);LocalDate endday = localDateate.with(TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).minusDays(1);String endDayStr = endday.format(dateTimeFormatter);return endDayStr;}//下一周的周一public String getLastMonOfWeek(String time) {LocalDate localDateate = LocalDate.parse(time, dateTimeFormatter);LocalDate endday = localDateate.with(TemporalAdjusters.next(java.time.DayOfWeek.MONDAY));String endDayStr = endday.format(dateTimeFormatter);return endDayStr;}

运行结果:

JAVA 获取指定月份的每周的开始日期和结束日期相关推荐

  1. Java获取指定月份的最后一天

    https://blog.csdn.net/itmyhome1990/article/details/85619804 Java获取指定月份的最后一天 麦田 2019-01-02 17:43:38   ...

  2. Java获取指定月份第一周第一天

    Java获取指定月份第一周第一天 思路: 1.获取当前月份第一天 2.获取第一天对应周几 3.根据周几减去对应天数得到指定日期 @Testpublic void test2(){Date lastWe ...

  3. Java 获取指定日期

    Java 获取指定日期每周的第一天和最后一天 private String firstWeekDay(String days)throws Exception{ String first_day=&q ...

  4. Java获取指定年月的开始时间和结束时间

    文章目录 Java获取指定年月的开始时间和结束时间 Java获取指定年月的开始时间和结束时间 // 获取指定年指定月的开始天数和结束天数public static Map<String,Date ...

  5. DateUtils 工具类:获取指定月份第一天时间,最后一天时间

    获取指定月份第一天时间 getMinDateMonth ,最后一天时间 getMaxDateMonth ,将时间区间按照月份分组,拆分多个片段 getDateSplitMonth 指定月份的下个月 g ...

  6. java 获取指定日期的前几天或后几天

    /*java获取指定日期的前几天或后几天@param datestr指定日期* @param format 日期格式* * @param flag true为获取后几天, false:为获取前几天* ...

  7. java获取指定日期的所在周的第一天(周一)

    java获取指定日期的所在周的第一天(周一) private static void getWeekByDate(Date time) {SimpleDateFormat sdf = new Simp ...

  8. JAVA获取指定日期

    JAVA获取指定日期 获取前/后(月.天.小时)时间 获取上月: 得到一个月最后一天日期(31/30/29/28) 获取本日日期 获取本周一日期 获取本周日日期 获取本月日期 java项目中经常需要用 ...

  9. java 获取指定日期下月的第一天

    java 获取指定日期的下月的第一天时多少:如传入20210323,则返回20210401,如传入20211221,则返回20220101 public static String getFirstD ...

最新文章

  1. 程序员的自由,不只在那一寸领地!
  2. Spring Web Application Security
  3. BeetleX网关自定义请求日志插件
  4. CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
  5. [深度学习-原理篇]什么是循环神经网络RNN与LSTM
  6. Spring是如何解决循环依赖的
  7. boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET
  8. 使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)
  9. C++ 野指针和悬空指针
  10. android 二选一的按钮,选择框 RadioButton/Check - Android 入门教程
  11. 云扩科技获ISIG RPA 产品奖
  12. 重置 Mac 上的系统管理控制器 (SMC)
  13. Graphviz画决策树中文乱码解决
  14. 基于51单片机智能农业大棚恒温恒湿Proteus仿真(源码+仿真+全套资料)
  15. 投简历一直没有回应,原因是...
  16. 【编程】8086/8088CPU最小/大模式
  17. 四款PDF文档制作软件横向评测
  18. CANoe之Panel Designer的使用(CANoe系列其二)
  19. Pytorch矩阵乘法之torch.mul() 、 torch.mm() 及torch.matmul()的区别
  20. eul for Mac中文版:一款轻量级菜单栏mac系统监控工具

热门文章

  1. 详解卷积公式的物理意义
  2. Android BLE设备蓝牙通信框架BluetoothKit
  3. FM6124D 是一款专为 LED 模块和显示器设计的驱动 IC
  4. 计算机视觉——Bag of features
  5. C语言数据结构-第四章 串-电大同步进度
  6. 计算机网络虚拟性开放性双重性,2013-2014学年第2学期《大学生安全教育》(2012级)试卷...
  7. 软件测试 保险公司人寿保险保费计算程序的等价类
  8. 求助!这个问题(Python)如何解决?
  9. 叉积学习笔记——例:hrbust-1304
  10. Java 对象生命周期和类生命周期