每隔 X 天在 Java 到 运行 中安排任务或仅执行一次

Scheduling a task in Java to run every X days or execute once only

这里既是 Whosebug 又是 Java 初学者。

所以我正在尝试在我的应用程序中实施一个调度程序。我希望某个过程/作业每隔 X 时间 运行 或只 运行 一次。这次需要可配置,所以我制作了一个简单的 Schedule 对象,其中包含 startDatelastExecuted、频率枚举、getter 和 setter 等字段。

现在,很容易让它每 X 天执行一次任务,例如 - 我只是使用 Groovy 的 TimeCategory 并创建了一个不断 运行s 和检查 lastExecuted 和当前时间之间的时间是否大于 Schedule

frequency enum 中指定的时间

问题 - 我怎么处理个?如果我将频率设置为每月一次,我该如何处理不同的月份长度?我想,另一种选择是每个月都有一个大的 switch 语句。但这似乎不是一个很好的解决方案。有没有可能以更优雅的方式做到这一点(最好没有任何额外的库或弃用的Java方法,如 Date 的 getDay() 方法等

谢谢。

虽然 Date.getDay 已弃用,但如果您阅读 Javadoc on Date,它会指出弃用的替代方法。

在这种情况下,您可能希望使用 Calendar class 来检索日期和时间信息。

您可以使用日历 class,即在每个月的 1 号安排一些事情:

Calendar now = Calendar.getInstance();

now.set(Calendar.DAY_OF_MONTH, 1);


for (int i = 0; i < 10; i++)
{
     now.add(Calendar.MONTH, 1);
     scheduler.scheduleAt(now); // or whatever you are using to schedule
}