我想在春天再执行下一次死刑。以前,我使用的是CronSequenceGenerator,但是由于不推荐使用它,所以我尝试更新到CronExpression。我使用ZonedDateTime作为当前日期来查找下一个日期。
String cron = "0 0 21 * * MON-FRI";
CronExpression cronExpression = CronExpression.parse(cron);
ZonedDateTime date = ZonedDateTime.parse("2021-04-12T21:00-04:00[America/Montreal]");
Instant next = cronExpression.next(date.toInstant());问题是,当我尝试的时候,我总是会得到一个例外,不管我是谁。
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: DayOfWeek
at java.base/java.time.Instant.get(Instant.java:565)
at org.springframework.scheduling.support.CronField$Type.get(CronField.java:200)
at org.springframework.scheduling.support.BitsCronField.nextOrSame(BitsCronField.java:180)
at org.springframework.scheduling.support.CronExpression.nextOrSameInternal(CronExpression.java:264)
at org.springframework.scheduling.support.CronExpression.nextOrSame(CronExpression.java:252)
at org.springframework.scheduling.support.CronExpression.next(CronExpression.java:245)
[...]我不知道我为什么要犯这个错误。如果我试图传递ZonedDateTime (因为它是时态的,而cronExpression.next是时态的),我就会得到一个编译错误。
java: incompatible types: inference variable T has incompatible bounds
lower bounds: java.time.Instant,java.time.chrono.ChronoZonedDateTime<?>,java.lang.Object,java.time.temporal.Temporal,java.lang.Comparable<? super T>
lower bounds: java.time.ZonedDateTime有人能告诉我我做错了什么吗?
我在5.3.20中使用Java11
这是我正在查阅的文档:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronExpression.html https://docs.oracle.com/javase/8/docs/api/java/time/temporal/Temporal.html?is-external=true
发布于 2022-08-10 14:28:14
使用OffsetDateTime而不是ZonedDateTime解决了这个问题,但我仍然不知道为什么。也许CronExpression的实现有问题?
使用ZonedDateTime和LocalDateTime试图跳过对Instant的转换会导致编译错误。不过,它也适用于OffsetDateTime。
发布于 2022-08-10 13:45:52
正如我在评论中提到的,Instant没有DayOfWeek。
String cron = "0 0 21 * * MON-FRI";
CronExpression cronExpression = CronExpression.parse(cron);
ZonedDateTime next = cronExpression.next(ZonedDateTime.now());https://stackoverflow.com/questions/73307289
复制相似问题