Déterminer l'égalité des valeurs datetime avec une précision de minute au sein de LINQ

StackOverflow https://stackoverflow.com/questions/1256460

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)
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top