C# 比较日期时间最可靠的方法?

C# 比较日期时间最可靠的方法?,c#,datetime,reliability,date-comparison,C#,Datetime,Reliability,Date Comparison,我主要在工作场所使用Delphi,在一些涉及比较日期时间的彻底单元测试中,我发现在比较计算日期等时,使用equals运算符进行直接比较不够可靠。因此,作为一项规则,我开始使用Delphi中用于日期比较的内置函数and 在C语言中,由于习惯的影响,我使用标准运算符=,比较日期/时间。我们有类似的函数,如和,用于日期-时间比较,因此在准确性和可靠性方面,我真的应该使用内置函数吗 他们会给我一个比使用操作符更准确的比较吗?如果你的日期/时间是经过计算的,你最好计算时间之间的差异,这会给你一个更好的结果

我主要在工作场所使用Delphi,在一些涉及比较日期时间的彻底单元测试中,我发现在比较计算日期等时,使用equals运算符进行直接比较不够可靠。因此,作为一项规则,我开始使用Delphi中用于日期比较的内置函数and

在C语言中,由于习惯的影响,我使用标准运算符=,比较日期/时间。我们有类似的函数,如和,用于日期-时间比较,因此在准确性和可靠性方面,我真的应该使用内置函数吗


他们会给我一个比使用操作符更准确的比较吗?

如果你的日期/时间是经过计算的,你最好计算时间之间的差异,这会给你一个更好的结果

然后,您可以检查这是否小于允许的公差

if (Math.Abs(travelTime.TotalMilliseconds) < tolerance)
{
    // times are equal.
}

这与浮点值需要采用的方法类似,但与此无关,因为在本例中,不准确源于数据,而不是它在内存中的表示方式。

如果计算了日期/时间,则最好计算时间之间的差异,这会给您带来更大的误差

然后,您可以检查这是否小于允许的公差

if (Math.Abs(travelTime.TotalMilliseconds) < tolerance)
{
    // times are equal.
}

这与浮点值需要采用的方法类似,但与此无关,因为在本例中,不准确源于数据,而不是它在内存中的表示方式。

我不太确定,但我的一位同事告诉我始终使用Equals运算符。对于DateTime对象,Equals和Compare正在比较刻度


如果您想了解更多有关提到的TimeSpan方法ChrisF的信息,请参阅。

我不是很确定,但我的一位同事告诉我要始终使用Equals运算符。对于DateTime对象,Equals和Compare正在比较刻度


如果您想了解更多有关TimeSpan方法ChrisF的信息,请参阅。

没关系,我知道TimeSpan的内容。我只是想澄清一下,使用运算符比较是否足够可靠。没关系,我知道TimeSpan的内容。我只是想澄清一下,使用运算符比较是否足够可靠。这也是我想到的第一件事。可以很好地包装成DateTime上的扩展方法。所以我感到困惑的是……如果运算符比较不可靠,为什么首先允许它们进行比较?操作符在DateTimes的引擎盖下到底做了什么?@James-它们被允许的方式与float1==float2被允许的方式相同。这是语言的一部分。如果您只处理日期部分或指定的日期/时间,则等式可能是可以的,但计算时间在毫秒或甚至秒以下时,您必须有一个误差范围。我明白了,如果没有计算日期,而是更多地转换日期,例如使用TimeZoneInfo.ConvertDate之类的东西将本地DT转换为UTC DT,会怎么样,在这里简单地比较使用运算符是否不可靠?@James-我认为最好的做法是进行一些实验,看看翻译过程中是否引入了错误。这也是我想到的第一件事。可以很好地包装成DateTime上的扩展方法。所以我感到困惑的是……如果运算符比较不可靠,为什么首先允许它们进行比较?操作符在DateTimes的引擎盖下到底做了什么?@James-它们被允许的方式与float1==float2被允许的方式相同。这是语言的一部分。如果您只处理日期部分或指定的日期/时间,则等式可能是可以的,但计算时间在毫秒或甚至秒以下时,您必须有一个误差范围。我明白了,如果没有计算日期,而是更多地转换日期,例如使用TimeZoneInfo.ConvertDate之类的东西将本地DT转换为UTC DT,会怎么样,简单地使用运算符进行比较是否不可靠?@James-我认为最好的做法是进行一些实验,看看翻译过程中是否引入了任何错误。请注意,如果减去UTC和本地时间戳,它将减去原始时间值。请注意,如果减去UTC和本地时间戳,它将减去原始时间值减去原始时间值。