目前我正在使用Quartz.Net Scheduler来安排不同的工作。在用户界面中,用户可以配置频率,即每周和每周和每周的时间,以触发作业。一旦用户可以配置这些属性,我目前正在显示下一个触发时间。
示例:每周星期日凌晨2点 CronString:0 0 2? * SUN * 当前日期:2013年3月8日星期五 时区:EST UTC-5.30 下一个触发时间:2013年3月10日周日凌晨2:00
这个工作正常。但如果DST将于2月10日开始,那么那天就不会有凌晨2点。因此CronExpression会抛出以下错误:
CronExpression exp = new CronExpression(cronStr);
var dt = exp.GetNextValidTimeAfter(DateTime.Now.ToUniversalTime()).Value.ToLocalTime();
return String.Format("{0:dddd, MMMM d, yyyy}", dt);
异常:抛出ArgumentException。 消息:“提供的DateTime表示无效时间。”
由于日历中没有这样的日期时间,我想跳过那一天并显示下一个有效日期,即2013年3月17日星期日凌晨2:00 A.M
帮助我如何解决这个问题,因为它是由.Net CLR在Quartz代码中内部抛出的。
答案 0 :(得分:1)
您可以使用TimeZoneInfo.Local.IsInvalidTime来查看时间是否有效,这将在3月的第2个星期日凌晨2:00到3:00之间返回true(大多数美国的DST开始日)和加拿大)。