Определите равенство значений Datetime с точностью до минуты в LINQ

StackOverflow https://stackoverflow.com/questions/1256460

Вопрос

Мне нужно сравнить два значения даты и времени, чтобы определить равенство (точно такое же), используя минутную точность.Будет ли это лучшим способом сделать это?Мои даты могут содержать секунды и миллисекунды, но я хочу считать только с точностью до минут.

       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 являются отметками дат для других значений, используемых в запросе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top