JAVA 获取指定月份的每周的开始日期和结束日期
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 获取指定月份的每周的开始日期和结束日期相关推荐
- Java获取指定月份的最后一天
https://blog.csdn.net/itmyhome1990/article/details/85619804 Java获取指定月份的最后一天 麦田 2019-01-02 17:43:38 ...
- Java获取指定月份第一周第一天
Java获取指定月份第一周第一天 思路: 1.获取当前月份第一天 2.获取第一天对应周几 3.根据周几减去对应天数得到指定日期 @Testpublic void test2(){Date lastWe ...
- Java 获取指定日期
Java 获取指定日期每周的第一天和最后一天 private String firstWeekDay(String days)throws Exception{ String first_day=&q ...
- Java获取指定年月的开始时间和结束时间
文章目录 Java获取指定年月的开始时间和结束时间 Java获取指定年月的开始时间和结束时间 // 获取指定年指定月的开始天数和结束天数public static Map<String,Date ...
- DateUtils 工具类:获取指定月份第一天时间,最后一天时间
获取指定月份第一天时间 getMinDateMonth ,最后一天时间 getMaxDateMonth ,将时间区间按照月份分组,拆分多个片段 getDateSplitMonth 指定月份的下个月 g ...
- java 获取指定日期的前几天或后几天
/*java获取指定日期的前几天或后几天@param datestr指定日期* @param format 日期格式* * @param flag true为获取后几天, false:为获取前几天* ...
- java获取指定日期的所在周的第一天(周一)
java获取指定日期的所在周的第一天(周一) private static void getWeekByDate(Date time) {SimpleDateFormat sdf = new Simp ...
- JAVA获取指定日期
JAVA获取指定日期 获取前/后(月.天.小时)时间 获取上月: 得到一个月最后一天日期(31/30/29/28) 获取本日日期 获取本周一日期 获取本周日日期 获取本月日期 java项目中经常需要用 ...
- java 获取指定日期下月的第一天
java 获取指定日期的下月的第一天时多少:如传入20210323,则返回20210401,如传入20211221,则返回20220101 public static String getFirstD ...
最新文章
- 程序员的自由,不只在那一寸领地!
- Spring Web Application Security
- BeetleX网关自定义请求日志插件
- CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
- [深度学习-原理篇]什么是循环神经网络RNN与LSTM
- Spring是如何解决循环依赖的
- boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET
- 使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)
- C++ 野指针和悬空指针
- android 二选一的按钮,选择框 RadioButton/Check - Android 入门教程
- 云扩科技获ISIG RPA 产品奖
- 重置 Mac 上的系统管理控制器 (SMC)
- Graphviz画决策树中文乱码解决
- 基于51单片机智能农业大棚恒温恒湿Proteus仿真(源码+仿真+全套资料)
- 投简历一直没有回应,原因是...
- 【编程】8086/8088CPU最小/大模式
- 四款PDF文档制作软件横向评测
- CANoe之Panel Designer的使用(CANoe系列其二)
- Pytorch矩阵乘法之torch.mul() 、 torch.mm() 及torch.matmul()的区别
- eul for Mac中文版:一款轻量级菜单栏mac系统监控工具