话不多说,直接上代码
计算周期内间隔多少周,返回数字
/**
* 根据时间区间获取中间间隔了多少周
* @param startDate
* @param endDate
* @return
*/
public static Long getNumOfWeek(Date startDate, Date endDate) {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(startDate);
c2.setTime(endDate);
long cc1 = From(c1).getTimeInMillis() / (1000 * 3600 * 24);
long cc2 = To(c2).getTimeInMillis() / (1000 * 3600 * 24);
return (cc2 - cc1 + 1) / 7;
}
获取每周的第一天和最后一天
public List<WeekEntity> getTimeList(){
Long numWeek = this.getNumOfWeek(Date date1,Date date2);
List<WeekEntity> weekList=new ArrayList();
//遍历数据获取每周的第一天和最后一天
for (int i = 0; i < numWeek; i++) {
//根据日期获取当前周的数据列表
List<Date> dateList = this.getDateListOfWeek(i, date1);
WeekEntity week = new WeekEntity ();
week.setStartDate(dateList.get(0));
week.setEndDate(dateList.get(dateList.size() - 1));
weekList.add(week);
}
return conditionBOList;
}
计算开始时间的日期
private static Calendar From(Calendar c) {
switch (calculate(c)) {
case 1:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - 0);
break;
case 2:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - 1);
break;
case 3:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - 2);
break;
case 4:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - 3);
break;
case 5:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - 4);
break;
case 6:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - 5);
break;
case 7:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - 6);
}
return c;
}
计算结束时间的日期
private static Calendar To(Calendar c) {
switch (calculate(c)) {
case 1:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 6);
break;
case 2:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 5);
break;
case 3:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 4);
break;
case 4:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 3);
break;
case 5:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 2);
break;
case 6:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 1);
break;
case 7:
c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 0);
}
return c;
}
日期计算工具
private static int calculate(Calendar c) {
int dayForWeek;
if (c.get(Calendar.DAY_OF_WEEK) == 1) {
dayForWeek = 7;
} else {
dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
}
return dayForWeek;
}
获取当前周的所有日期
/**
* 获取当前周的所有日期
*
* @param n -1代表上一周 +1代表下一周
* @param myDate 当前日期
*/
public static List<Date> getDateListOfWeek(int n, Date myDate) {
List<Date> date = new ArrayList<Date>();
try {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
//判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周了,获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
//设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
//获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, (cal.getFirstDayOfWeek() - day + 7 * n));
date.add(cal.getTime());
for (int i = 1; i < 7; i++) {
cal.add(Calendar.DATE, 1);
date.add(cal.getTime());
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return date;
}