在一些数据的分组中,有一些数据需要按周分组。
使用Calendar.getWeekOfYear()方法,可以直接获取到某个日期在这一年是第几周。
但是如果数据的时间跨度大于一年,有可能出现一年的结尾和下一年的开始为同一周,造成数据错误。
如果要严格按照周来分组,可以计算出,该日期相对于1970-01-01的这一周是第几周。
首先是要计算,这个日期距离1970-01-01有多少天:
public static int getBetweenDay(Date date1, Date date2) {
Calendar d1 = new GregorianCalendar();
d1.setTime(date1);
Calendar d2 = new GregorianCalendar();
d2.setTime(date2);
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
do {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
在上述方法中,返回两个日期相距多少天,date2为1970-01-01;
然后将天换算成周,因为1970-01-01是周四,所以:
public static Integer getWeekIndexForInitial(Date date) throws ParseException {
String today = "1970-01-01";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = format.parse(today);
int day = getBetweenDay(date2, date);
Double dayDouble = Double.valueOf(day);
Double weekDouble = Math.ceil((dayDouble - 3.0) / 7.0 + 1.0);
int week = weekDouble.intValue();
return week;
}
返回的是,该日期,对于1970-01-01来说是第几周,可以无视跨年可能造成的错误。