我需要比较两个日期时间值以确定它们是否相等,使用分钟精度。这是最好的方法吗?我的日期可能有秒和毫秒,但我只想考虑到分钟。
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
检查 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
然而,这就引出了一个问题,为什么你在问题标题中提到“分钟精度”,或者在问题正文中提到“使用最多分钟精度”。
怎么样?
where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))
?
datetime1.Millisecond
,那不对 - 它的值始终在0到999之间。 - Jon Skeet谢谢Allen,我会这样做的(还在弄清楚整个过程的具体方式!)。以下是代码片段,指示我最初得出的答案:
(Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
背景:在我的Linq查询的WHERE子句中(因此是一行代码),我需要检查datetime1和datetime2是否完全相同。考虑的datetime值是用于查询中使用的其他值的时间戳日期。