【发布时间】:2016-10-31 22:09:16
【问题描述】:
我们目前正在重写我们服务的核心,基本上我们有可以按时间间隔、日期、特定时间等运行的计划任务。
目前我们想知道夏令时是否会给我们带来麻烦,基本上我们根据任务应该执行的日期以及时间间隔和间隔来计算下一个可能的运行时间。我们通过获取当前时间并将天/分钟/小时添加到此 DateTime 来做到这一点。
然后我们获取这个新的运行时间并从这个 DateTime 中减去 DateTime.Now,留下到下一次运行之前的时间跨度。
但是,如果当前时间是夏令时的 01:50,我们会增加 20 分钟,这是我们设定的时间间隔,最后的时间是 02:10,但是既然是夏令时,它就是实际上是 01:10。
当我从 01:10(实际上是 02:10)中减去当前时间 (01:50) 时,这会返回一个负值,我需要解决这个问题,还是因为 DateTime 永远不会返回负值是否只是一个很长的底层保存了正确的信息?
基本上,下面的代码,是否需要检查?
//Get interval between nextrun and right now!
double interval = (NextRun - DateTime.Now).TotalMilliseconds;
//Check if interval is ever less or equal to 0, should never happen but maybe with daylight saving time?
if(interval <= 0)
{
//Set default value
interval = IntervalInMilliseconds;
}
我们认为不需要这项检查,但到目前为止,我们的谷歌搜索还没有给我们一个明确的答案。
【问题讨论】:
-
我意识到我迟到了,但为什么不依赖操作系统为您执行此操作,例如安排服务/cronjob 以您需要的时间间隔运行?似乎它可以让你的程序更简单(即不处理日期的东西,只是假设每当它启动时,就该运行了)。是否有理由不考虑或不起作用?