Determinar a igualdade de valores datetime com precisão minuto dentro LINQ
Pergunta
Eu preciso comparar dois valores de data e hora para determinar a igualdade (exatamente a mesma), utilizando minuto precision.Would esta seja a melhor maneira de fazê-lo? As minhas datas poderia ter segundos e milésimos de segundo, mas eu quero considerar apenas para baixo até minutos.
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
Solução
verificar se Math.Abs(diff.TotalMinutes) == 0
não vai fazer isso, não. - Isso é verificar se eles são exatamente o mesmo
Você está tentando verificar se eles têm o mesmo minuto, ou se eles são menos de um minuto distante? Para o primeiro, use:
where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)
tendo declarado:
public static DateTime RoundToMinute(DateTime time)
{
return new DateTime(time.Year, time.Month, time.Day,
time.Hour, time.Minute, 0, time.Kind);
}
Para a segunda, use:
where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1
Você deve considerar o que você quer que o resultado seja no caso em que um é local e está em UTC, pelo caminho ...
Note que não é específico LINQ-nada aqui - supondo que você está usando LINQ to Objects. Se você estiver usando LINQ to SQL, então, obviamente, você não pode usar métodos locais, e nós vamos ter de olhar de novo ...
EDIT: Eu ainda sou muito claro sobre sua pergunta. Se você precisa deles para ser exatamente a mesma data / hora, é fácil (deixando de lado a possível locais vs questão UTC):
where dateTime1 == dateTime2
No entanto, isso levanta a questão de por que você menciona "precisão minuciosa" no título pergunta ou "utilizando até uma precisão minuto" no corpo questão.
Outras dicas
Como cerca
where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))
?
Graças Allen, vai fazer isso (ainda descobrir exatamente como funciona o processo!) Aqui está o trecho de código que indica a resposta que eu tinha vindo acima com inicialmente:.
(Math.Abs ??(datetime1.Subtract (datetime2) .TotalMinutes) == 0)
Fundo: Dentro de minha consulta linq é cláusula WHERE (portanto, um one-liner), eu preciso verificar se datetime1 e datetime2 são exatamente os mesmos. Os valores de data e hora em consideração são datas selo para outros valores usados ??na consulta.