我今天大部分时间都在浏览文档,却无法弄清楚应该怎么做。
我希望每周在每个星期六的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类。这可以按预期工作,但是如何计算当前时间和周六午夜之间的剩余分钟数或小时数,然后可以在计划程序中使用它在每个周末的正确时间启动活动?
对于重复项,我不是要获取即将到来的星期六的日期,而是要获取从当前时间到即将到来的星期六之间的分钟/小时。尽管如果可以通过日期完成它,我不介意。
答案 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