要获取当前时间与下一个星期六之间的剩余分钟/小时?

时间:2018-08-14 12:47:48

标签: java time timer scheduler localdate

我今天大部分时间都在浏览文档,却无法弄清楚应该怎么做。

我希望每周在每个星期六的00:00到星期一的00:00(48h)举办一次活动。

public static void scheduleEvent() {
    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);       

    Long saturdayMidnight = LocalDateTime.now().until(LocalDateTime.now().plusMinutes(1/* ??? */), ChronoUnit.MINUTES);
    scheduler.scheduleAtFixedRate(new EventTimer(), saturdayMidnight, TimeUnit.DAYS.toMinutes(1), TimeUnit.MINUTES);
}

作为此处的测试,我将其设置为等待一分钟直到调用EventTimer类。这可以按预期工作,但是如何计算当前时间和周六午夜之间的剩余分钟数或小时数,然后可以在计划程序中使用它在每个周末的正确时间启动活动?

对于重复项,我不是要获取即将到来的星期六的日期,而是要获取从当前时间到即将到来的星期六之间的分钟/小时。尽管如果可以通过日期完成它,我不介意。

1 个答案:

答案 0 :(得分:1)

以下是获取“下一个星期六,午夜” LocalDateTime实例的摘录,然后是直到那时的小时和分钟。

// getting next saturday midnight
LocalDateTime nextSaturdayMidnight = LocalDateTime.now()
    // truncating to midnight
    .truncatedTo(ChronoUnit.DAYS)
    // adding adjustment to next saturday
    .with(TemporalAdjusters.next(DayOfWeek.SATURDAY));

// getting hours until next saturday midnight
long hoursUntilNextSaturdayMidnight = LocalDateTime.now()
    // getting offset in hours
    .until(nextSaturdayMidnight, ChronoUnit.HOURS);

// getting minutes until...
long minutesUntilNextSaturdayMidnight = LocalDateTime.now()
    // getting offset in minutes
    .until(nextSaturdayMidnight, ChronoUnit.MINUTES);

在撰写本文时(8月14日14:02),这三个变量应如下所示:

2018-08-18T00:00
81
4917