实际项目中时间可能需要按周来计算,那么就需要知道某年度的所有周了
/**
* 获取指定年的所有周
* @param year
* @return
*/
public static List<Map<String, Object>> getWeekOfYear(int year) {
List list = new ArrayList<>();
// 获取当前日期属于第几周
int weekNumOfYear = getWeekNumOfYear(new Date());
//初始化,第一周至少四天,周天数占比
WeekFields wfs = WeekFields.of(DayOfWeek.MONDAY, 4);
//一年最后一天日期的LocalDate,如果该天获得的周数为1或52,那么该年就只有52周,否则就是53周
//获取指定时间所在年的周数
int num = LocalDate.of(year, 12, 31).get(wfs.weekOfWeekBasedYear());
num = num == 1 ? 52 : num;
// num控制周数
for (int i = 1; i <= num; i++) {
String days = getDay(year, i, DayOfWeek.MONDAY) + "," +
getDay(year, i, DayOfWeek.TUESDAY) + "," +
getDay(year, i, DayOfWeek.WEDNESDAY) + "," +
getDay(year, i, DayOfWeek.THURSDAY) + "," +
getDay(year, i, DayOfWeek.FRIDAY) + "," +
getDay(year, i, DayOfWeek.SATURDAY) + "," +
getDay(year, i, DayOfWeek.SUNDAY);
String[] split = trim(days, ",").split(",");
String start = split[0];
String end = split[split.length - 1];
days = start + "~" + end;
System.out.println(2022 + "年,第" + i + "周,日期:" + days);
// System.out.println(2022 + "week" + i + "(" + days + ")");
HashMap<Object, Object> data = new HashMap<>();
data.put("year", year);
data.put("week", i);
data.put("days", days);
data.put("startDay", start);
data.put("end", end);
data.put("isCurrentWeek", 0);
// 设置周数是否是当前周数
if (weekNumOfYear == i) {
data.put("isCurrentWeek", 1);
}
list.add(data);
}
return list;
}
private static String getDay(Integer year, Integer num, DayOfWeek dayOfWeek) {
//周数小于10在前面补个0
String numStr = num < 10 ? "0" + String.valueOf(num) : String.valueOf(num);
//2019-W01-01获取第一周的周一日期,2019-W02-07获取第二周的周日日期
String weekDate = String.format("%s-W%s-%s", year, numStr, dayOfWeek.getValue());
String date = LocalDate.parse(weekDate, DateTimeFormatter.ISO_WEEK_DATE).toString();
String[] split = date.split("-");
if (!split[0].equals(year.toString())) {
//返回日期范围属于指定年
return "";
}
date = split[1] + "-" + split[2];
return date;
}
/**
* 去除首尾指定字符
* @param str 字符串
* @param element 指定字符
* @return
*/
public static String trim(String str, String element) {
if (str == null || str.equals("")) return str;
boolean beginIndexFlag = true;
boolean endIndexFlag = true;
do {
int beginIndex = str.indexOf(element) == 0 ? 1 : 0;
int endIndex = str.lastIndexOf(element) + 1 == str.length() ? str.lastIndexOf(element) : str.length();
str = str.substring(beginIndex, endIndex);
beginIndexFlag = (str.indexOf(element) == 0);
endIndexFlag = (str.lastIndexOf(element) + 1 == str.length());
} while (beginIndexFlag || endIndexFlag);
return str;
}
/**
* 取得某天是一年中的多少周
* @param date
* @return
*/
public static int getWeekNumOfYear(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(7);
c.setTime(date);
return c.get(Calendar.WEEK_OF_YEAR);
}
测试:
public static void main(String[] args) throws JSONException {
List<Map<String, Object>> weekOfWeek = getWeekOfYear(2022);
System.out.println(JSONUtils.serialize(weekOfWeek));
}
控制台打印输出结果:
2022年,第1周,日期:01-03~01-09
2022年,第2周,日期:01-10~01-16
2022年,第3周,日期:01-17~01-23
2022年,第4周,日期:01-24~01-30
2022年,第5周,日期:01-31~02-06
2022年,第6周,日期:02-07~02-13
2022年,第7周,日期:02-14~02-20
2022年,第8周,日期:02-21~02-27
2022年,第9周,日期:02-28~03-06
2022年,第10周,日期:03-07~03-13
2022年,第11周,日期:03-14~03-20
2022年,第12周,日期:03-21~03-27
2022年,第13周,日期:03-28~04-03
2022年,第14周,日期:04-04~04-10
2022年,第15周,日期:04-11~04-17
2022年,第16周,日期:04-18~04-24
2022年,第17周,日期:04-25~05-01
2022年,第18周,日期:05-02~05-08
2022年,第19周,日期:05-09~05-15
2022年,第20周,日期:05-16~05-22
2022年,第21周,日期:05-23~05-29
2022年,第22周,日期:05-30~06-05
2022年,第23周,日期:06-06~06-12
2022年,第24周,日期:06-13~06-19
2022年,第25周,日期:06-20~06-26
2022年,第26周,日期:06-27~07-03
2022年,第27周,日期:07-04~07-10
2022年,第28周,日期:07-11~07-17
2022年,第29周,日期:07-18~07-24
2022年,第30周,日期:07-25~07-31
2022年,第31周,日期:08-01~08-07
2022年,第32周,日期:08-08~08-14
2022年,第33周,日期:08-15~08-21
2022年,第34周,日期:08-22~08-28
2022年,第35周,日期:08-29~09-04
2022年,第36周,日期:09-05~09-11
2022年,第37周,日期:09-12~09-18
2022年,第38周,日期:09-19~09-25
2022年,第39周,日期:09-26~10-02
2022年,第40周,日期:10-03~10-09
2022年,第41周,日期:10-10~10-16
2022年,第42周,日期:10-17~10-23
2022年,第43周,日期:10-24~10-30
2022年,第44周,日期:10-31~11-06
2022年,第45周,日期:11-07~11-13
2022年,第46周,日期:11-14~11-20
2022年,第47周,日期:11-21~11-27
2022年,第48周,日期:11-28~12-04
2022年,第49周,日期:12-05~12-11
2022年,第50周,日期:12-12~12-18
2022年,第51周,日期:12-19~12-25
2022年,第52周,日期:12-26~12-31
实际上我们项目要的不是这种格式,我们重新格式化一下返回json数据
isCurrentWeek 表示当前周
[
{
"week": 1,
"year": 2022,
"startDay": "01-03",
"days": "01-03~01-09",
"end": "01-09",
"isCurrentWeek": 0
},
{
"week": 2,
"year": 2022,
"startDay": "01-10",
"days": "01-10~01-16",
"end": "01-16",
"isCurrentWeek": 0
},
{
"week": 3,
"year": 2022,
"startDay": "01-17",
"days": "01-17~01-23",
"end": "01-23",
"isCurrentWeek": 0
},
{
"week": 4,
"year": 2022,
"startDay": "01-24",
"days": "01-24~01-30",
"end": "01-30",
"isCurrentWeek": 0
},
{
"week": 5,
"year": 2022,
"startDay": "01-31",
"days": "01-31~02-06",
"end": "02-06",
"isCurrentWeek": 0
},
{
"week": 6,
"year": 2022,
"startDay": "02-07",
"days": "02-07~02-13",
"end": "02-13",
"isCurrentWeek": 0
},
{
"week": 7,
"year": 2022,
"startDay": "02-14",
"days": "02-14~02-20",
"end": "02-20",
"isCurrentWeek": 0
},
{
"week": 8,
"year": 2022,
"startDay": "02-21",
"days": "02-21~02-27",
"end": "02-27",
"isCurrentWeek": 0
},
{
"week": 9,
"year": 2022,
"startDay": "02-28",
"days": "02-28~03-06",
"end": "03-06",
"isCurrentWeek": 0
},
{
"week": 10,
"year": 2022,
"startDay": "03-07",
"days": "03-07~03-13",
"end": "03-13",
"isCurrentWeek": 0
},
{
"week": 11,
"year": 2022,
"startDay": "03-14",
"days": "03-14~03-20",
"end": "03-20",
"isCurrentWeek": 0
},
{
"week": 12,
"year": 2022,
"startDay": "03-21",
"days": "03-21~03-27",
"end": "03-27",
"isCurrentWeek": 0
},
{
"week": 13,
"year": 2022,
"startDay": "03-28",
"days": "03-28~04-03",
"end": "04-03",
"isCurrentWeek": 1
},
{
"week": 14,
"year": 2022,
"startDay": "04-04",
"days": "04-04~04-10",
"end": "04-10",
"isCurrentWeek": 0
},
{
"week": 15,
"year": 2022,
"startDay": "04-11",
"days": "04-11~04-17",
"end": "04-17",
"isCurrentWeek": 0
},
{
"week": 16,
"year": 2022,
"startDay": "04-18",
"days": "04-18~04-24",
"end": "04-24",
"isCurrentWeek": 0
},
{
"week": 17,
"year": 2022,
"startDay": "04-25",
"days": "04-25~05-01",
"end": "05-01",
"isCurrentWeek": 0
},
{
"week": 18,
"year": 2022,
"startDay": "05-02",
"days": "05-02~05-08",
"end": "05-08",
"isCurrentWeek": 0
},
{
"week": 19,
"year": 2022,
"startDay": "05-09",
"days": "05-09~05-15",
"end": "05-15",
"isCurrentWeek": 0
},
{
"week": 20,
"year": 2022,
"startDay": "05-16",
"days": "05-16~05-22",
"end": "05-22",
"isCurrentWeek": 0
},
{
"week": 21,
"year": 2022,
"startDay": "05-23",
"days": "05-23~05-29",
"end": "05-29",
"isCurrentWeek": 0
},
{
"week": 22,
"year": 2022,
"startDay": "05-30",
"days": "05-30~06-05",
"end": "06-05",
"isCurrentWeek": 0
},
{
"week": 23,
"year": 2022,
"startDay": "06-06",
"days": "06-06~06-12",
"end": "06-12",
"isCurrentWeek": 0
},
{
"week": 24,
"year": 2022,
"startDay": "06-13",
"days": "06-13~06-19",
"end": "06-19",
"isCurrentWeek": 0
},
{
"week": 25,
"year": 2022,
"startDay": "06-20",
"days": "06-20~06-26",
"end": "06-26",
"isCurrentWeek": 0
},
{
"week": 26,
"year": 2022,
"startDay": "06-27",
"days": "06-27~07-03",
"end": "07-03",
"isCurrentWeek": 0
},
{
"week": 27,
"year": 2022,
"startDay": "07-04",
"days": "07-04~07-10",
"end": "07-10",
"isCurrentWeek": 0
},
{
"week": 28,
"year": 2022,
"startDay": "07-11",
"days": "07-11~07-17",
"end": "07-17",
"isCurrentWeek": 0
},
{
"week": 29,
"year": 2022,
"startDay": "07-18",
"days": "07-18~07-24",
"end": "07-24",
"isCurrentWeek": 0
},
{
"week": 30,
"year": 2022,
"startDay": "07-25",
"days": "07-25~07-31",
"end": "07-31",
"isCurrentWeek": 0
},
{
"week": 31,
"year": 2022,
"startDay": "08-01",
"days": "08-01~08-07",
"end": "08-07",
"isCurrentWeek": 0
},
{
"week": 32,
"year": 2022,
"startDay": "08-08",
"days": "08-08~08-14",
"end": "08-14",
"isCurrentWeek": 0
},
{
"week": 33,
"year": 2022,
"startDay": "08-15",
"days": "08-15~08-21",
"end": "08-21",
"isCurrentWeek": 0
},
{
"week": 34,
"year": 2022,
"startDay": "08-22",
"days": "08-22~08-28",
"end": "08-28",
"isCurrentWeek": 0
},
{
"week": 35,
"year": 2022,
"startDay": "08-29",
"days": "08-29~09-04",
"end": "09-04",
"isCurrentWeek": 0
},
{
"week": 36,
"year": 2022,
"startDay": "09-05",
"days": "09-05~09-11",
"end": "09-11",
"isCurrentWeek": 0
},
{
"week": 37,
"year": 2022,
"startDay": "09-12",
"days": "09-12~09-18",
"end": "09-18",
"isCurrentWeek": 0
},
{
"week": 38,
"year": 2022,
"startDay": "09-19",
"days": "09-19~09-25",
"end": "09-25",
"isCurrentWeek": 0
},
{
"week": 39,
"year": 2022,
"startDay": "09-26",
"days": "09-26~10-02",
"end": "10-02",
"isCurrentWeek": 0
},
{
"week": 40,
"year": 2022,
"startDay": "10-03",
"days": "10-03~10-09",
"end": "10-09",
"isCurrentWeek": 0
},
{
"week": 41,
"year": 2022,
"startDay": "10-10",
"days": "10-10~10-16",
"end": "10-16",
"isCurrentWeek": 0
},
{
"week": 42,
"year": 2022,
"startDay": "10-17",
"days": "10-17~10-23",
"end": "10-23",
"isCurrentWeek": 0
},
{
"week": 43,
"year": 2022,
"startDay": "10-24",
"days": "10-24~10-30",
"end": "10-30",
"isCurrentWeek": 0
},
{
"week": 44,
"year": 2022,
"startDay": "10-31",
"days": "10-31~11-06",
"end": "11-06",
"isCurrentWeek": 0
},
{
"week": 45,
"year": 2022,
"startDay": "11-07",
"days": "11-07~11-13",
"end": "11-13",
"isCurrentWeek": 0
},
{
"week": 46,
"year": 2022,
"startDay": "11-14",
"days": "11-14~11-20",
"end": "11-20",
"isCurrentWeek": 0
},
{
"week": 47,
"year": 2022,
"startDay": "11-21",
"days": "11-21~11-27",
"end": "11-27",
"isCurrentWeek": 0
},
{
"week": 48,
"year": 2022,
"startDay": "11-28",
"days": "11-28~12-04",
"end": "12-04",
"isCurrentWeek": 0
},
{
"week": 49,
"year": 2022,
"startDay": "12-05",
"days": "12-05~12-11",
"end": "12-11",
"isCurrentWeek": 0
},
{
"week": 50,
"year": 2022,
"startDay": "12-12",
"days": "12-12~12-18",
"end": "12-18",
"isCurrentWeek": 0
},
{
"week": 51,
"year": 2022,
"startDay": "12-19",
"days": "12-19~12-25",
"end": "12-25",
"isCurrentWeek": 0
},
{
"week": 52,
"year": 2022,
"startDay": "12-26",
"days": "12-26~12-31",
"end": "12-31",
"isCurrentWeek": 0
}
]