如何从“CronExpression.GetNextValidTimeAfter(DateTimeOffset)”石英调度程序方法中获取 UTC±00:00 格式的结果日期时间?

How to get the result datetime from “CronExpression.GetNextValidTimeAfter(DateTimeOffset)” quartz scheduler method in UTC±00:00 format?

我正在将 UTC±00:00 时间传递给 Quartz 调度程序中的 GetNextValidTimeAfter() 方法,以根据特定的 cron 表达式计算下一个有效调度时间,但由于我的系统时间是 PST,结果是return以 UTC−08:00 格式编辑,但我需要以 UTC±00:00 格式获取结果。

CronExpression expression = new CronExpression("0 0 1 1/1 * ? *"); //Daily 1 AM
DateTime EasternTimeUTC = new DateTime(2020, 3, 7, 6, 00, 0); //Corresponding UTC time for EST time 7th March 1 AM
DateTimeOffset? nextFireUTCTime = expression.GetNextValidTimeAfter(EasternTimeUTC); 

nextFireUTCTime returns 下一个有效日期时间为 3/8/2020 9:00 AM,采用 UTC−08:00 格式,因为我的系统时区是 PST,但我需要结果在 UTC±00:00,应该是 3/8/2020 6:00 AM。我如何获得这个值?

由于找不到解决上述问题的合适方法,我尝试了以下方法。

我的系统将始终处于 PST 时区,这意味着我从 GetNextValidTimeAfter() 石英调度程序方法获得的结果将始终 return 采用 UTC−08:00 格式。为了获得 EST 时区格式的输出,我根据 DST 从结果中减去 8 或 7 小时,但是当预定时间介于 3 月 8 日凌晨 12 点 - 凌晨 1 点之间时,此解决方案失败。

CronExpression expression = new CronExpression("0 0 1 1/1 * ? *"); 
DateTime EasternTimeUTC = new DateTime(2020, 3, 7, 6, 00, 0); 
DateTimeOffset? nextFireUTCTime = expression.GetNextValidTimeAfter(EasternTimeUTC); 
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime UTCNextTime1 = DateTime.UtcNow;
if (timeZone.IsDaylightSavingTime(nextFireUTCTime.GetValueOrDefault()))
   {
            UTCNextTime1 = nextFireUTCTime.Value.DateTime.AddHours(-7);
   }
else
   {
            UTCNextTime1 = nextFireUTCTime.Value.DateTime.AddHours(-8);
   }

确保您传入的日期时间是 UTC 并设置 CronExpression 的时区

CronExpression expression = new CronExpression("0 0 1 1/1 * ? *"); //Daily 1 AM
expression.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime EasternTimeUTC = new DateTime(2020, 3, 7, 6, 00, 0, DateTimeKind.Utc); //Corresponding UTC time for EST time 7th March 1 AM
DateTimeOffset? nextFireUTCTime = expression.GetNextValidTimeAfter(EasternTimeUTC);