当前位置:  开发笔记 > 编程语言 > 正文

比较C#中两个DateTime的相等性的最佳方法是什么?但只有一定的精度?

如何解决《比较C#中两个DateTime的相等性的最佳方法是什么?但只有一定的精度?》经验,为你挑选了2个好方法。

我有两个日期时间,一个来自时间戳,另一个是我在代码中生成的.我需要测试他们的平等,并且喜欢在没有太多表情的情况下做到这一点.这是我两个日期的一个例子:

DateTime expireTimeStampUTC = 
    DateTime.Parse(UTCValueFromDatabase));
DateTime expectedExpireTime = 
    DateTime.UtcNow.AddHours(NumberOfExpectedHoursInConfig);

这是测试精度太高:

if(expireTimeStampUTC.Equals(expectedExpireTime)){}

我不在乎他们是否与第二小时完全相同.

它可能是做这样复合的最佳解决方案:

if (expireTimeStampUTC.Date.Equals(expectedExpireTime.Date))
{
    if (!expireTimeStampUTC.Hour.Equals(expectedExpireTime.Hour))
    {
        pass = false;
    }
}

我不是最有经验的C#...是否有一些优雅的方法来做到这一点?



1> Colin Dabrit..:

如果您遇到的问题是因为它们是数据库类型,您可以转换为该类型并进行比较,我们会在大约1/3的数据库保存中丢失/获得大约一毫秒的转换为SQLDateTimes.

如果没有,请比较您实际关注的单位:

DateTime dt1 = DateTime.UtcNow;
DateTime dt2 = DateTime.UtcNow.AddMinutes(59); // or 1 or 61 for test values;

// if the dates are in the same hour (12:10 == 12:50, 1:58 != 2:02)
if(dt1.Hour == dt2.Hour) // result

或者如果你关心它们是在一小时的时间范围内

// if the dates are within one hour of each other (1:58 == 2:02, 3:30 != 4:45)
if((dt1 - dt2).Duration() < TimeSpan.FromHours(1)) // result

这里减去日期会产生一个时间跨度,持续时间是'绝对值',然后我们从我们关心的单位(FromHours)明确地创建限制并进行比较.

最后一行是尽可能干净的,我认为在特定的时间跨度内做平等.



2> Matt Hamilto..:

如何找到两个小时之间的差异,并查看它是否低于某个阈值(例如一小时3600秒)?

var diff = expireTimeStamp.Subtract(expectedExpireTime).TotalSeconds;
pass = Math.Abs(diff) < 3600;

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有