Определить равенство значений Datetime с точностью до минуты в LINQ - PullRequest
6 голосов
/ 10 августа 2009

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

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

Ответы [ 3 ]

11 голосов
/ 10 августа 2009

Проверка того, не будет ли 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

Однако возникает вопрос, почему вы упоминаете «минутную точность» в заголовке вопроса или «использование с точностью до минуты» в теле вопроса.

0 голосов
/ 12 августа 2009

Спасибо, Аллен, сделает это (все еще выясняя, как именно работает этот процесс!). Вот фрагмент кода, показывающий ответ, который я получил изначально:

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

Предыстория: В предложении WHERE моего запроса linq (следовательно, в одной строке) мне нужно проверить, совпадают ли datetime1 и datetime2. Рассматриваемые значения даты и времени являются датами штампов для других значений, используемых в запросе.

0 голосов
/ 10 августа 2009

Как насчет

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

...