7

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

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

3 回答 3

12

检查是否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

但是,这引出了一个问题,即为什么您在问题标题中提到“分钟精度”或在问题正文中“使用高达一分钟精度”。

于 2009-08-10T18:39:34.123 回答
0

怎么样

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

?

于 2009-08-10T18:35:49.560 回答
0

谢谢艾伦,会这样做(仍在弄清楚该过程是如何工作的!)。这是指示我最初提出的答案的代码片段:

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

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

于 2009-08-12T13:53:35.447 回答