0

目前我正在使用 Quartz.Net Scheduler 来安排不同的作业。在 UI 中,用户可以配置频率,即每周和星期几和时间,以触发作业。一旦用户可以配置这些属性,我当前正在显示下一个触发时间。

示例:每周日凌晨 2 点 CronString: 0 0 2 ? * SUN * 当前日期:2013 年 3 月 8 日星期五时区:EST UTC-5.30 下一个触发时间:2013 年 3 月 10 日星期日凌晨 2:00

这个工作正常。但如果 DST 将在 2 月 10 日开始,那么那一天就不会是凌晨 2:00。所以 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

帮助我如何解决这个问题,因为它是由 .Net CLR 在 Quartz 代码中内部抛出的。

4

1 回答 1

1

您可以使用 TimeZoneInfo.Local.IsInvalidTime 查看时间是否有效,这将在 3 月 2 日凌晨 2:00 到 3:00 之间的时间返回 true(美国和加拿大大部分地区的 DST 开始日) .

此处提供了更多信息 http://blogs.msdn.com/b/bclteam/archive/2007/06/11/system-timezoneinfo-working-with-ambiguous-and-invalid-points-in-time-josh-free .aspx

于 2013-02-01T18:00:07.357 回答