java获取当前时间到凌晨0点的秒差

这几天做一个每日分享给予奖励的一个需求,用户每天可以分享多次,考虑的不需要入库,将用户的分享次数用redis记录,每天凌晨0点删除key

翻阅了好几篇文章,看到几个坑,分享一下

public Long getSecondsTobeforedawn() {
     
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_YEAR, 1);
        // 坑就在这里
        cal.set(Calendar.HOUR, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }

上面这段代码存在一个问题,就是如果当前时间超过中午12:00,则返回的结果是当前时间到第二天中午12:00的秒数;
如果当前时间不超过中午12:00,则返回的结果是到第二天凌晨的秒数

解决方案

 public Long getSecondsTobeforedawn() {
     
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_YEAR, 1);
        // 改成这样就好了
        cal.set(Calendar.HOUR_OF_DAY, 0);      
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }

你可能感兴趣的:(java获取当前时间到凌晨0点的秒差)