代码之家  ›  专栏  ›  技术社区  ›  PreethaA

在LINQ中用分钟精度确定日期时间值的相等性

  •  6
  • PreethaA  · 技术社区  · 15 年前

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

           where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
    
    3 回复  |  直到 15 年前
        1
  •  11
  •   Jon Skeet    15 年前

    检查是否 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。如果您使用的是linq-to-sql,那么显然您不能使用本地方法,我们必须再次查看…

    编辑:我对你的问题还是很不清楚。如果你需要的话 确切地 相同的日期/时间很容易(不考虑可能的本地问题和UTC问题):

    where dateTime1 == dateTime2
    

    然而,这就引出了一个问题,为什么你在题目中提到“分钟精度”,或者在问题主体中提到“用完了一分钟精度”。

        2
  •  0
  •   mmmmmmmm    15 年前

    怎么样

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

    ?

        3
  •  0
  •   PreethaA    15 年前

    谢谢艾伦,会的。(仍在弄清楚过程是如何工作的!)。下面是指示我最初得出的答案的代码段:

    (math.abs(datetime1.subtract(datetime2.totalminutes)==0)

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