Déterminer l'égalité des valeurs datetime avec une précision de minute au sein de LINQ
Question
Je dois comparer deux valeurs datetime pour déterminer l'égalité (exactement le même), en utilisant precision.Would minute ce la meilleure façon de le faire? Mes dates pourraient avoir secondes et millisecondes, mais je veux considérer que vers le bas jusqu'à minutes.
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
La solution
Vérifier si Math.Abs(diff.TotalMinutes) == 0
ne le fera pas, non. - C'est de vérifier s'ils sont exactement même
Essayez-vous de vérifier si elles ont la même minute, ou s'ils sont moins d'une minute d'intervalle? Pour la première, utilisez:
where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)
ayant déclaré:
public static DateTime RoundToMinute(DateTime time)
{
return new DateTime(time.Year, time.Month, time.Day,
time.Hour, time.Minute, 0, time.Kind);
}
Pour la seconde, utilisez:
where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1
Vous devriez considérer ce que vous voulez que le résultat soit dans le cas où l'un est local et un est en UTC, par la manière ...
Notez qu'il n'y a rien LINQ spécifique ici - en supposant que vous utilisez LINQ aux objets. Si vous utilisez LINQ to SQL, vous pouvez évidemment pas utiliser des méthodes locales, et nous allons devoir regarder à nouveau ...
EDIT: Je suis toujours très clair sur votre question. Si vous avez besoin d'être exactement la même date / heure, il est facile (en laissant de côté la possible locale vs numéro UTC):
where dateTime1 == dateTime2
Cependant, cela pose la question de savoir pourquoi vous parlez de « précision minute » dans le titre de la question ou « en utilisant jusqu'à une précision de minute » dans le corps de question.
Autres conseils
Qu'en est-
where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))
Merci Allen, le fera (encore à déterminer exactement comment fonctionne le processus!) Voici l'extrait de code indiquant la réponse que j'avais trouvé initialement.
(Math.abs (datetime1.Subtract (datetime2) .TotalMinutes) == 0)
Contexte: Dans ma requête de LINQ WHERE clause (donc une seule ligne), je dois vérifier si datetime1 et datetime2 sont exactement les mêmes. Les valeurs datetime à l'étude sont des dates de timbre pour les autres valeurs utilisées dans la requête.