如何在 Java 中每天在设定的时间运行代码? [复制]

Posted

技术标签:

【中文标题】如何在 Java 中每天在设定的时间运行代码? [复制]【英文标题】:How do I run code at a set time every day in Java? [duplicate] 【发布时间】:2021-05-28 22:51:25 【问题描述】:

目前正在研究某种算法,我需要每天在同一时间运行代码。我试过创建一个计时器,但我对它并不熟悉,我能做的最多就是每 x 秒运行一次代码。我知道我可以每 86400 秒做一次,但这似乎充其量只是一个笨拙的解决方案,我觉得有更好的解决方案。如果您有任何想法,请告诉我。非常感谢。

【问题讨论】:

如果转换为秒或毫秒是您唯一的问题,请使用TimeUnit.DAYS.toMillis(1) 或Duration.ofDays(1).toMillis() 必须是 Java 吗?为什么不使用 cron(如果您在 Linux 上)或 Task Scheduler(如果您在 Windows 上)? 您可以使用 cronJobs 在定义的时间安排作业。参考这个链接***.com/questions/22163662/… 同一个问题的解决方法如下链接:[调度器详情][1][1]:***.com/questions/7814089/… 【参考方案1】:

如果你想在特定时间(比如 10:00)运行yourTask(),你可以这样做:

Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 10);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);

Timer timer = new Timer();
timer.schedule(yourTask(), today.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS));

【讨论】:

这不会编译,您需要将TimerTask 引用传递给schedule(),但目前您正在直接执行yourTask() Calendar 类多年前被 JSR 310 中定义的 java.time 类取代。Timer 多年前被ScheduledExecutorService 取代。 这很好用!非常感谢。上面的评论是正确的 yourTask() 没有工作,我只是在调度程序中定义了 run() 方法,它工作正常。【参考方案2】:

您可以使用不同的调度程序。例如Quartz 就是其中之一

【讨论】:

以上是关于如何在 Java 中每天在设定的时间运行代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java 如何设定时间执行程序

每天在设定的时间快速重复本地通知

例如,如何在 13:00 准时运行我的项目每天(在 java 中)[重复]

Swift:在每天设定的时间之间创建重复的本地通知

C# 定时自动执行程序

如何在 UWP 的后台每天午夜运行一些代码?