我们目前正在重写我们服务的核心,基本上我们已经安排了可以按时间间隔,日期,特定时间等运行的任务等。
目前我们想知道白天化是否可能给我们带来麻烦,基本上我们根据任务应该执行的天数以及在什么时间和什么时间间隔内计算下一个可能的运行时间。我们通过获取当前时间并将日期/分钟/小时添加到此DateTime来执行此操作。
然后我们接受这个新的运行时间并从这个DateTime中减去DateTime.Now,留下时间跨度,直到下一次运行。然而,如果当前时间是白天的01:50,我们加上20分钟,这是我们的设定间隔,结束时间为02:10,因为这是daylightavinds,它是实际上是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;
}
我们认为不需要这种检查,但到目前为止我们的谷歌搜索还没有给我们一个明确的答案。
答案 0 :(得分:4)
使用DateTime.UtcNow代替DateTime.Now EVERYWHERE
答案 1 :(得分:0)
首先,您可以亲自尝试,因为它可以帮助您了解它的工作原理。
基本上,使用上面的例子,如果你有20分钟到当地时间,它将是2:10而不是1:10,因为计算是在当地时间完成的。如果你想得到1:10,你需要将当地时间转换为世界时,再加20分钟,然后转换回当地时间。
如果您想要实际经过的时间,那么您必须在计算时差之前将时间转换为通用时间。此外,如果你在当地时间工作,你将无法区分时钟倒流时的模糊时间。