夏时制是否会导致DateTime计算变为负值?

本文关键字:计算 DateTime 是否 夏时制 | 更新日期: 2023-09-27 18:04:35

我们目前正在重写我们服务的核心,基本上我们有计划任务,可以在间隔,日期,特定时间等运行。

目前我们想知道夏令时是否会给我们带来麻烦,基本上我们计算下一个可能的运行时间,基于任务应该执行的天数,在什么时间之间,以及什么间隔。我们通过获取当前时间,并在DateTime中添加天/分钟/小时来实现这一点。

然后取这个新的运行时并减去DateTime。现在从这个DateTime开始,留给我们直到下一次运行的时间范围。

如果当前时间是夏时制的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;
}

我们相信这个检查是不必要的,但是我们的谷歌搜索到目前为止还没有给我们一个明确的答案。

夏时制是否会导致DateTime计算变为负值?

使用DateTime。UtcNow而不是DateTime。现在到处都是

首先,您可以自己尝试一下,因为它将帮助您了解它是如何工作的。

基本上,使用上面的示例,如果距离本地时间还有20分钟,那么它将是2:10而不是1:10,因为计算是在本地时间完成的。如果你想得到1:10,你需要将本地时间转换为世界时,添加20分钟,然后转换回本地时间。

如果您想要真实的经过时间,那么您必须在计算时差之前将时间转换为通用时间。此外,如果您使用本地时间,那么当时钟返回时,您将无法区分模糊的时间。