根据日期,判断该周为第几周(从1970-01-01开始)

在一些数据的分组中,有一些数据需要按周分组。
使用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来说是第几周,可以无视跨年可能造成的错误。

你可能感兴趣的:(开发中遇到的问题)