java 给定日期获取当月每周开始时间和结束时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | package date; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; public class TestLocal1 { public static void main(String[] args) { System.out.println( "getScope()====" +getScope()); } private static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd" ); public static List<Map> getScope() { String date = "2023-02-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 static 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 static 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; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)