java - java中仅每24小时或一天调用一次函数的逻辑
问题描述
我有一个功能
callEach24hourOneTime();
一旦执行,我必须在每 24 小时内仅在 24 内调用一次此函数,然后我不必调用 callEach24hourOneTime
我无法以毫秒为单位获取当前时间小时分钟和秒,以便我可以应用我在逻辑下尝试但无法执行的条件。
if(currentmillis=86400000 ){
callEach24hourOneTime();
}
else {
//dont call do other operation
}
请为此建议我的解决方案。
解决方案
在方法执行之间始终至少有 24 小时的逻辑callEach24hourOneTime()
:
private long nextCallMillis;
long currentMillis = System.currentTimeMillis();
if (currentMillis >= this.nextCallMillis) {
this.nextCallMillis = currentMillis + 86400000/*24 hours*/;
callEach24hourOneTime();
} else {
// ...
}
这将导致执行该方法的时间发生偏差。漂移的速度取决于代码执行的频率。
如果您希望每天(大约)在同一时间调用方法:
private long nextCallMillis;
long currentMillis = System.currentTimeMillis();
if (this.nextCallMillis == 0)
this.nextCallMillis = currentMillis; // Establish time-of-day
if (currentMillis >= this.nextCallMillis) {
this.nextCallMillis += ((currentMillis - this.nextCallMillis) / 86400000 + 1) * 86400000;
callEach24hourOneTime();
} else {
// ...
}
“每天同一时间”采用 UTC,因此当穿越夏令时更改时,时间将更改 1 小时。
更新
如果您只想要“每天一次”的逻辑:
private LocalDate lastCallDate;
LocalDate today = LocalDate.now();
if (! today.equals(lastCallDate)) {
this.lastCallDate = today;
callOnceDailyOneTime();
} else {
// ...
}
推荐阅读
- debugging - How to load debug symbols for the whole OVMF UEFI image in gdb?
- php - orderby meta_value_num 和页面属性 order
- c# - .Net core JWT 自定义过期令牌响应
- java - 如何使用 swagger-maven-plugin 序列化类的 Instant 字段?
- swift - NSTextView的插入点绘制位置异常
- html - 如何修复使按钮重叠的表单
- android - 如何在android屏幕共享期间在webrtc中获取手机的内部声音
- kubernetes - Kubernetes 中每个部署可以配置多少个 pod?
- python - 如何使用 scipy 评估边界优化变化的步长范围
- firebase - 是否有任何 api 调用来验证 firebase serverkey 和发件人 ID?