Determinar la igualdad de los valores Datetime con minutos de precisión dentro de LINQ
Pregunta
Necesito comparar dos valores datetime para determinar la igualdad(exactamente el mismo),el uso de minutos de precisión.Sería la mejor manera de hacerlo?Mis fechas podría haber segundos y milisegundos, pero quiero considerar sólo hacia abajo hasta minutos.
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
Solución
Comprobar si Math.Abs(diff.TotalMinutes) == 0
no lo hará, no -. Eso es comprobar si son exactamente mismo
¿Estás tratando de comprobar si tienen el mismo minuto, o si son menos de un minuto de diferencia? Para la primera, el uso:
where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)
haber declarado:
public static DateTime RoundToMinute(DateTime time)
{
return new DateTime(time.Year, time.Month, time.Day,
time.Hour, time.Minute, 0, time.Kind);
}
En la segunda, el uso:
where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1
Debe tener en cuenta lo que quiere que el resultado sea en el caso de que uno es local y uno está en UTC, por cierto ...
Tenga en cuenta que no hay nada LINQ específica aquí - asumiendo que usted está utilizando LINQ a Objetos. Si está utilizando LINQ a SQL, entonces, evidentemente, no puede utilizar los métodos locales, y vamos a tener que mirar de nuevo ...
EDIT: Estoy siendo muy claro en su pregunta. Si se necesita que sean exactamente la misma fecha / hora, es fácil (dejando a un lado la posible cuestión locales vs UTC):
where dateTime1 == dateTime2
Sin embargo, esto plantea la pregunta de por qué usted menciona "un minuto de precisión" en el título de la pregunta o "el uso de hasta un minuto de precisión" en el cuerpo cuestión.
Otros consejos
¿Qué tal
where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))
Gracias Allen,va a hacer que(todavía averiguar exactamente cómo funciona el proceso!).Aquí está el fragmento de código que indica la respuesta que yo había venido para arriba con un principio:
(Las matemáticas.Abs(datetime1.Restar(datetime2).TotalMinutes) == 0)
Antecedentes:En mi consulta de linq cláusula where(por lo tanto de una sola línea), necesito comprobar si datetime1 y datetime2 son exactamente los mismos.Los valores datetime considerados son el sello de fechas para otros valores utilizados en la consulta.