java中每24小时或一天只调用一次函数的逻辑

java中每24小时或一天只调用一次函数的逻辑,java,Java,我有一个功能 callEach24hourOneTime(); 我必须在24小时内调用这个函数,在24小时内只调用一次,一旦它被执行,那么我就不必调用callEach24hourOneTime 我无法以毫秒为单位获取当前时间小时分秒,以便我可以应用我在逻辑下尝试的条件,但无法执行 if(currentmillis=86400000 ){ callEach24hourOneTime(); } else { //dont call do other operation } 请为我推荐解决方案

我有一个功能

callEach24hourOneTime();
我必须在24小时内调用这个函数,在24小时内只调用一次,一旦它被执行,那么我就不必调用callEach24hourOneTime

我无法以毫秒为单位获取当前时间小时分秒,以便我可以应用我在逻辑下尝试的条件,但无法执行

if(currentmillis=86400000 ){
 callEach24hourOneTime(); 
}
else {
//dont call do other operation
}

请为我推荐解决方案。

您可以使用cron库

我真的不知道您目前使用的是什么语言或框架,但从spring开始,我想说您可以使用@Scheduled:

@Scheduled(cron = "0 0 0 * * *")
  private void myMethod(){}

例如,上面的cron将使myMethod()每天执行一次。

逻辑要求在
调用的24hourontime()方法执行之间至少有24小时

private long nextCallMillis;
private long nextCallMillis;
这将导致一天中执行方法的时间漂移。漂移的速度取决于代码执行的频率

如果您希望在每天的同一时间调用方法

“每天同一时间”是UTC,因此当跨越夏令时发生变化时,一天中的时间将改变1小时


更新

如果您只需要“每天一次”逻辑:


java EE包含了调度器,对于java SE,您可以依赖于CRON。请不要建议这是C、C++或C++问题。您似乎只是想在这里玩系统游戏。首先,
=
是赋值运算符,因此代码不会编译。使用
==
相等运算符。--其次,在24小时后执行
if
语句的概率非常低,以毫秒为单位。使用<代码> CurrutMurLIS>=86400000 < /Cord>如果这是java,那么为什么C++,C++还有c标签?你可以使用定时器:我不需要使用任何库,我有基于Logic@HypnoZi execute code的写函数,但如果条件不改变,它总是执行@Andreas@AnilThakur您确定在调用之间保留字段值
nextCallMillis
?逻辑运作良好。请参阅加速演示(每秒一次,而不是每24小时一次)。我认为nextCallMillis我们需要在本地保存一些,但在这种情况下,我需要设置日期更改的时间,然后我们再次设置nextCallMillis 0。您能建议我吗@Andreas@AnilThakur为什么需要“再次设置nextCallMillis 0”?你知道
System.currentTimeMillis()的值是什么意思吗?代码的全部要点是记住调用该方法的时间(一天中的某个时间),因此可以在该时间再次调用该方法,每24小时调用一次。如果您清除了“when date change”(当日期更改时)的值,那么这其中有什么意义?还有一件事,如果我要更改日期,我们必须将nextCallMillis调用值重置为0
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 {
    // ...
}
private LocalDate lastCallDate;
LocalDate today = LocalDate.now();
if (! today.equals(lastCallDate)) {
    this.lastCallDate = today;
    callOnceDailyOneTime();
} else {
    // ...
}