获取某年的所有周日期

实际项目中时间可能需要按周来计算,那么就需要知道某年度的所有周了

/**
 * 获取指定年的所有周
 * @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
    }
]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值