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)
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top