Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从“;CronExpression.GetNextValidTimeAfter(DateTimeOffset)和#x201D;UTC±中的石英调度器方法;00:00格式?_C#_Datetime_Quartz Scheduler - Fatal编程技术网

C# 如何从“;CronExpression.GetNextValidTimeAfter(DateTimeOffset)和#x201D;UTC±中的石英调度器方法;00:00格式?

C# 如何从“;CronExpression.GetNextValidTimeAfter(DateTimeOffset)和#x201D;UTC±中的石英调度器方法;00:00格式?,c#,datetime,quartz-scheduler,C#,Datetime,Quartz Scheduler,我正在将UTC±00:00时间传递给Quartz scheduler中的GetNextValidTimeAfter()方法,以根据特定的cron表达式计算下一个调度的有效时间,但由于我的系统时间以PST为单位,因此结果以UTC为单位返回−08:00格式,但我需要获得UTC±00:00格式的结果 CronExpression expression = new CronExpression("0 0 1 1/1 * ? *"); //Daily 1 AM DateTime EasternTimeUT

我正在将UTC±00:00时间传递给Quartz scheduler中的GetNextValidTimeAfter()方法,以根据特定的cron表达式计算下一个调度的有效时间,但由于我的系统时间以PST为单位,因此结果以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); 
NextDirectTime返回下一个有效日期时间,即2020年8月3日上午9:00(UTC)−08:00格式,因为我的系统时区为太平洋标准时间,但我需要UTC±00:00格式的结果,即2020年8月3日上午6:00。我如何得到这个值

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

我的系统将始终处于PST时区,这意味着我从GetNextValidTimeAfter()石英调度器方法获得的结果将始终以UTC返回−08:00格式。为了获得EST时区格式的输出,我将根据DST从结果中减去8或7小时,但当计划时间在3月8日12.00 am-1.59 am之间时,此解决方案失败

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);

您可以使用DateTimeOffset.UtcDateTime()吗?您可以使用UTC。本地时间和UTC之间的datetime对象没有区别。DataTime对象只是根据电脑的区域性设置以不同的方式显示。如果您更改了电脑上的时区,UTC时间仍然显示相同的结果。@DmitriTsoy我尝试了您的建议,但它返回的结果相同,即2020年8月3日9:00AM@jdweng当我将我的系统时区更改为EST时,通过GetNextValidTimeAfter()返回的datetime值也会根据UTC对应的时区(UTC-05:00)进行更改,这就是我所说的。在PST中,您得到的是-08:00;在EST中,您得到的是-05:00,这意味着UTC时间没有改变。因此,如果您获取当前DataTime对象并添加X,您将获得下一个计划时间。无论您将X添加到UTC还是本地时间,结果都是一样的。DateTime(2020、3、7、6、00、0)-这是我的UTC时间,我需要基于此UTC时间的下一个有效时间。如果您在上面的建议中添加DateTimeKind,CronExpression应该以UTC返回您的日期-这对您不起作用吗?如果我尝试您的方法,我得到的下一个有效时间是2020年7月3日上午9:00,但我需要的结果是2020年8月3日上午6:00 3/7/2020年上午9:00太平洋标准时间==2020年7月3日凌晨1:00 UTC,但您正在将其与东部标准时间进行比较?您的查询时间是否应该与PST时间不相等?我已经更新了对PST版本的响应,它似乎是您的时区。我尝试实现的功能是,用户可以从选择列表中选择任何时区,然后指定开始时间,还可以指定cron表达式。现在,我需要将指定的时区时间转换为UTC,然后将其传递给GetNextValidTimeAfter()方法,以获得相同UTC格式的下一个计划时间,但每次都以我的系统时区UTC格式返回结果(即,如果我的系统时区为PST,则返回UTC-8;如果我的系统时区为EST,则返回UTC-5)。