java - 使用定时器在java中安排任务

标签 java timer timezone scheduled-tasks

我使用 java 创建了时区特定的计划任务事件。我的代码如下。

Timer timer = new Timer();
Calendar date = Calendar.getInstance(TimeZone.getTimeZone("Asia/Colombo"));
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
timer.schedule(new TimerTask() {
    public void run() {
        System.out.println("Runs everday morning 12.00 AM");
    }
 }, date.getTime(), 1000 * 60 * 60 * 24);

但问题是,当调用此方法时,它很快就会运行此任务。我需要每天 12:00 在亚洲/科伦坡时区运行此作业。如何做到这一点?

最佳答案

您将第一次执行安排在过去(当天午夜),因此您的任务将立即执行。

根据javadoc :

[...] if the scheduled first time is in the past, it is scheduled for immediate execution.

解决此问题的最简单方法是在计划的首次执行时间上添加 1 天:

date.add(Calendar.DATE, 1);
<小时/>

此外,您可能希望将此任务的执行安排为固定速率,而不是固定延迟。如果不这样做,您的任务将每天稍后执行,具体取决于完成任务所需的实际时间。再次参见javadoc了解详情。

关于java - 使用定时器在java中安排任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838110/

相关文章:

Java,从 ArrayList 中删除对象重写为文本文件

java - Spring MVC : Required Date parameter 'date' is not present

android - 检查 CountDownTimer 是否正在运行

c# - 每 n 秒调用一次存储过程

java - 创建基于 UTC 而不是本地时间的 JSR 310 时钟?

java - 如何以 UTC 显示所选时区的 Toast

java - hibernate-redis 是否支持由不同的 hibernate 实例共享的二级缓存

java - SimpleDateFormat android 没有按预期格式化

javascript - 我如何制作一个计时器?

html - 确定用户的时区