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;
  }
 
}

  

 

posted @   红尘沙漏  阅读(885)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示