首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将Spring上下文的cronExpression与ZonedDateTime结合使用

不能将Spring上下文的cronExpression与ZonedDateTime结合使用
EN

Stack Overflow用户
提问于 2022-08-10 13:34:54
回答 2查看 93关注 0票数 1

我想在春天再执行下一次死刑。以前,我使用的是CronSequenceGenerator,但是由于不推荐使用它,所以我尝试更新到CronExpression。我使用ZonedDateTime作为当前日期来查找下一个日期。

代码语言:javascript
复制
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());

问题是,当我尝试的时候,我总是会得到一个例外,不管我是谁。

代码语言:javascript
复制
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是时态的),我就会得到一个编译错误。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-10 14:28:14

使用OffsetDateTime而不是ZonedDateTime解决了这个问题,但我仍然不知道为什么。也许CronExpression的实现有问题?

使用ZonedDateTime和LocalDateTime试图跳过对Instant的转换会导致编译错误。不过,它也适用于OffsetDateTime。

票数 0
EN

Stack Overflow用户

发布于 2022-08-10 13:45:52

正如我在评论中提到的,Instant没有DayOfWeek

代码语言:javascript
复制
String cron = "0 0 21 * * MON-FRI";
CronExpression cronExpression = CronExpression.parse(cron);
ZonedDateTime next = cronExpression.next(ZonedDateTime.now());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73307289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档