这几天做一个每日分享给予奖励的一个需求,用户每天可以分享多次,考虑的不需要入库,将用户的分享次数用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;
}