如何在每天所需的时间执行该方法

问题描述 投票:0回答:1

我有一个方法,应该无限期地每天晚上 9 点执行。如果错过了时间(因为机器/笔记本电脑处于非活动状态),则应在第二天晚上 9 点执行。这应该一直运行。我尝试了下面的代码,但是该方法执行了一次,第二天就没有执行

Calendar now = Calendar.getInstance();

        // Set the desired time to 9 PM
        Calendar desiredTime = Calendar.getInstance();
        desiredTime.set(Calendar.HOUR_OF_DAY, 21); // 9 PM
        desiredTime.set(Calendar.MINUTE, 0);
        desiredTime.set(Calendar.SECOND, 0);
        desiredTime.set(Calendar.MILLISECOND, 0);

        // Check if the desired time is in the past, if so, add one day
        if (now.after(desiredTime)) {
            desiredTime.add(Calendar.DAY_OF_MONTH, 1);
        }

        long delay = desiredTime.getTimeInMillis() - now.getTimeInMillis();

        timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                Display.getDefault().asyncExec(new Runnable() {
                    @Override
                    public void run() {
                        // method to be called
                    }
                });
            }
        }, delay, 24 * 60 * 60 * 1000); // 24 hours in milliseconds
java time timer calendar scheduler
1个回答
0
投票

如果您将 Spring 与 Java 一起使用,一种选择是使用 @Scheduled 与 cron 表达式。

类似这样的:

@Scheduled(cron = "0 0 21 * * ?", zone = "Europe/Paris")

您可以在这里找到有关@Scheduled的更多信息:https://www.baeldung.com/spring-scheduled-tasks

您可以在这里使用 cron 表达式:https://www.freeformatter.com/cron-expression-generator-quartz.html

© www.soinside.com 2019 - 2024. All rights reserved.