统计一个包含时间的list集合中,在这个集合中的开始时间和结束时间是跨好几年的,年末和下一年出的几天是在同一周的,统计这个集合中所有时间在这个开始时间和结束时间中的周数出现的次数,用java代码
时间: 2023-11-14 11:15:10 浏览: 85
假设包含时间的list集合为List<Date> dates,开始时间为Date startDate,结束时间为Date endDate。可以使用Calendar类来计算周数。
首先找到开始时间和结束时间所在的年份,以及开始时间所在年份的第一周和结束时间所在年份的最后一周。代码如下:
```
Calendar calStart = Calendar.getInstance();
calStart.setTime(startDate);
int startYear = calStart.get(Calendar.YEAR);
calStart.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
calStart.setMinimalDaysInFirstWeek(7);
int startWeek = calStart.get(Calendar.WEEK_OF_YEAR);
Calendar calEnd = Calendar.getInstance();
calEnd.setTime(endDate);
int endYear = calEnd.get(Calendar.YEAR);
calEnd.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
calEnd.setMinimalDaysInFirstWeek(7);
calEnd.set(Calendar.DAY_OF_YEAR, calEnd.getActualMaximum(Calendar.DAY_OF_YEAR));
int endWeek = calEnd.get(Calendar.WEEK_OF_YEAR);
```
然后遍历集合中的每个时间,计算其所在的年份和周数。如果该时间的年份在开始时间和结束时间之间,且所在周数在开始周和结束周之间,则累加该周出现的次数。代码如下:
```
int[] count = new int[endWeek - startWeek + 1];
for (Date date : dates) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int week = cal.get(Calendar.WEEK_OF_YEAR);
if (year >= startYear && year <= endYear && week >= startWeek && week <= endWeek) {
count[week - startWeek]++;
}
}
for (int i = 0; i < count.length; i++) {
System.out.println("Week " + (i + startWeek) + ": " + count[i]);
}
```
阅读全文