我需要使用Quartz.Net测试某个日期是否与cron表达式匹配。我正在尝试使以下代码正常工作,但失败了。
// The data I'm testing is Dec 4, 2018 which is a Tuesday.
var date = new DateTimeOffset(2018, 12, 4, 0, 0, 0, TimeSpan.FromHours(0));
// Expression must define every monday, time is irrelevant
var expression = new CronExpression("0 0 0 ? * MON *");
// This returns 2018-12-09. But the next Monday after my date is 2018-12-10 !!
var next = expression.GetNextValidTimeAfter(date);
如果您查看我的评论,Quartz将在下一个星期一返回2018-12-09。但这是一个星期天...我不明白为什么,也许是误解了时间因素-我根本不需要。
所以我想表达是可以的。 有什么提示吗?
答案 0 :(得分:0)
找出原因。 CronExpression缺少TimeZone。 例如:
var date = new DateTimeOffset(2018, 12, 4, 0, 0, 0, TimeSpan.FromHours(0));
var expression = new CronExpression("0 0 0 ? * MON *") { TimeZone = TimeZoneInfo.Utc };
var next = expression.GetNextValidTimeAfter(date);
现在会为我正确返回。