根据日期,判断该周为第几周(从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来说是第几周,可以无视跨年可能造成的错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值