在LINQ中确定具有分钟精度的Datetime值的相等性

时间:2009-08-10 18:32:51

标签: c# datetime precision equality

我需要比较两个日期时间值以确定相等(完全相同),使用精确度。这是最好的方法吗?我的日期可能有几秒和几毫秒,但我想只考虑到几分钟。

       where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)

3 个答案:

答案 0 :(得分:11)

检查Math.Abs(diff.TotalMinutes) == 0是否会这样做,不 - 这是检查他们是否完全相同。

您是在尝试检查它们是否有相同的分钟,或者它们是否相隔不到一分钟?首先,使用:

where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)

宣布:

public static DateTime RoundToMinute(DateTime time)
{
    return new DateTime(time.Year, time.Month, time.Day,
                        time.Hour, time.Minute, 0, time.Kind);
}

对于第二个,请使用:

where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1

顺便说一下,你应该考虑一下你想要的结果是一个是本地的,一个是UTC的......

请注意,这里没有LINQ特定的 - 假设您正在使用LINQ to Objects。如果您正在使用LINQ to SQL,那么显然您无法使用本地方法,我们将不得不重新审视......

编辑:我仍然不清楚你的问题。如果您需要它们完全相同的日期/时间,那么很容易(不考虑可能的本地与UTC问题):

where dateTime1 == dateTime2

然而,这引出了一个问题,即为什么你在问题标题中提到“微小精确度”或在问题正文中提到“使用一分钟精确度”。

答案 1 :(得分:0)

怎么样

where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))

答案 2 :(得分:0)

感谢Allen,会这样做(仍然确切地知道这个过程是如何工作的!)。这是代码片段,表明我最初提出的答案:

(Math.Abs​​(datetime1.Subtract(datetime2).TotalMinutes)== 0)

背景:在我的linq查询的WHERE子句中(因此是单行),我需要检查datetime1和datetime2是否完全相同。正在考虑的日期时间值是查询中使用的其他值的戳记日期。