Определите равенство значений Datetime с точностью до минуты в LINQ
Вопрос
Мне нужно сравнить два значения даты и времени, чтобы определить равенство (точно такое же), используя минутную точность.Будет ли это лучшим способом сделать это?Мои даты могут содержать секунды и миллисекунды, но я хочу считать только с точностью до минут.
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 для объектов.Если вы используете LINQ to SQL, то, очевидно, вы не можете использовать локальные методы, и нам придется посмотреть еще раз...
Редактировать:Мне все еще очень неясен ваш вопрос.Если вам нужно, чтобы они были именно так в ту же дату / время, это просто (оставляя в стороне возможную проблему с локальным и UTC):
where dateTime1 == dateTime2
Однако возникает вопрос, почему вы упоминаете "минутную точность" в названии вопроса или "использование с точностью до минуты" в теле вопроса.
Другие советы
Как насчет
where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))
?
Спасибо, Аллен, сделаю это (все еще выясняя, как именно работает процесс!).Вот фрагмент кода, указывающий на ответ, который я придумал изначально:
(Математика.Abs(datetime1.Вычесть(datetime2).Общее количество минут) == 0)
Предыстория:В предложении WHERE моего запроса linq (следовательно, однострочный) мне нужно проверить, совпадают ли datetime1 и datetime2.Рассматриваемые значения datetime являются отметками дат для других значений, используемых в запросе.