记一次BUG, 获取本周的第一天和最后一天

Java日历类Calendar 默认是从星期天开始算作本周的第一天, 所以网上很多都是直接获取本周的第二天Calendar.MONDAY来当做本周的第一天,但是实际上有个很严重的问题就是周天的时候去获取本周的第一天实际上是获取到了下一周的周一从而导致周天的数据并没有统计到.

错误示例如下: 

解决也很简单,就是如果是周天就往前减一周

获取本周第一天正确代码:

   /**
     * 获取本周的第一天 00:00:00
     * @return
     */
    public static Date currentWeekFirstDay() {
        Calendar cal = Calendar.getInstance();
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
        if (Calendar.SUNDAY == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);//星期天向前减一天即得到上一周
        }
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }

获取本周的最后一天:

    /**
     * 获取本周的周日最后一秒时间节点 23:59:59
     * @return
     */
    public static Date currentWeekLastDay() {
        Calendar cal = Calendar.getInstance();
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
        if (Calendar.SUNDAY == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);//最后一天周六
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.add(Calendar.DAY_OF_WEEK, 1);//加一天得到周天
        return cal.getTime();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值