最近在做一个统计的相关功能,由于数据库表的设计比较特殊,其中有一个字段表示星期几。于是写了一个统计两日期之间星期一至星期日个数的功能。
入参形式为开始与结束对应时间的时间戳。
有不足之处,希望大佬指正。下面贴代码:
/**
* 获取两时间之间星期一至星期日的个数
*
* @param startdate 开始时间戳
* @param enddate 结束时间戳
* @return list
*/
public static List<Integer> getDayNum(long startdate, long enddate) {
//初始化列表,0-6对应星期一至星期日
List<Integer> list = new ArrayList<>(List.of(0, 0, 0, 0, 0, 0, 0));
//过零点算作新的一天
startdate = startdate + 28800000L;
enddate = enddate + 28800000L;
//gap表示两时间戳间含括多少天
int gap = (int) (enddate / 86400000 - startdate / 86400000 + 1);
Calendar temp = Calendar.getInstance();
for (int i = 0; i < gap; i++) {
//逐天递增
temp.setTimeInMillis(startdate + i * 86400000L);
int day = temp.get(Calendar.DAY_OF_WEEK);
switch (day) {
case 2 -> list.set(0, list.get(0) + 1);
case 3 -> list.set(1, list.get(1) + 1);
case 4 -> list.set(2, list.get(2) + 1);
case 5 -> list.set(3, list.get(3) + 1);
case 6 -> list.set(4, list.get(4) + 1);
case 7 -> list.set(5, list.get(5) + 1);
case 1 -> list.set(6, list.get(6) + 1);
}
}
return list;
}