//不废话,直接干
CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator("0 15 9,21 * * ?");
Date date = DateUtils.toDate(LocalDate.now()); Date yesterday = new Date(date.getTime() - 1000L); //昨天最后一秒的下一个时次,也就是今天第一个时次 Date firstCronTimeToday = cronSequenceGenerator.next(yesterday); System.out.println(firstCronTimeToday);
为什么要减1000L呢?
因为Cron表达式最小单位是秒,因此需要先获取到今天00:00:00,然后减1秒,从昨天23:59:59开始计算。
其中DateUtils的代码如下
public class DateUtils { public static Date toDate(LocalDate localDate){ LocalDateTime localDateTime = LocalDateTime.of(localDate, LocalTime.of(0, 0, 0));
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant());
}
}
最后看下quartz包是怎么实现的
其实也是这么干的,为什么我没有用它的API,因为不知道它这API咋用的,就看了下原理。
标签:DateUtils,SpringBoot,zdt,00,Cron,Date,表达式 From: https://www.cnblogs.com/yanyan-rourou/p/16922971.html