Bestimmen Sie die Gleichheit von Datetime-Werten mit Minutengenauigkeit innerhalb von LINQ
Frage
Ich muss zwei Datums-/Uhrzeitwerte vergleichen, um die Gleichheit (genau die gleichen) mit Minutengenauigkeit festzustellen. Wäre dies der beste Weg, dies zu tun?Meine Daten könnten Sekunden und Millisekunden haben, aber ich möchte nur bis zu Minuten berücksichtigen.
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
Lösung
Überprüfen, ob Math.Abs(diff.TotalMinutes) == 0
wird es nicht tun, nein -. Das ist zu prüfen, ob sie sind genau die gleiche
Sind Sie versuchen, zu überprüfen, ob sie die gleiche Minute haben, oder ob sie weniger als eine Minute auseinander? Zum ersten, zu verwenden:
where RoundToMinute(dateTime1) == RoundToMinute(dateTime2)
erklärt haben:
public static DateTime RoundToMinute(DateTime time)
{
return new DateTime(time.Year, time.Month, time.Day,
time.Hour, time.Minute, 0, time.Kind);
}
Für die zweite, zu verwenden:
where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1
Sie sollten überlegen, was Sie das Ergebnis in dem Fall sein wollen, dass eine lokal ist und man ist in UTC, übrigens ...
Beachten Sie, dass es nichts LINQ spezifisch hier - vorausgesetzt, Sie verwenden LINQ to Objects. Wenn Sie LINQ to SQL verwenden, dann natürlich können Sie nicht lokale Methoden verwenden, und wir werden wieder suchen müssen ...
EDIT: Ich bin immer noch sehr unklar, auf Ihre Frage. Wenn Sie sie brauchen, um genau die gleiche Datum / Uhrzeit, es einfach ist, (Abfahrt der möglichen lokal vs UTC Problem beiseite):
where dateTime1 == dateTime2
jedoch, dass die Frage der bittet, warum Sie „Minute Präzision“ in der Frage Titel erwähnen oder „Verwendung von bis zu einer Minute Präzision up“ in der Frage Körper.
Andere Tipps
Wie wäre es
where (Math.Floor(datetime1.Ticks / 600000000) == Math.Floor(datetime2.Ticks / 600000000))
Danke Allen, ich werde das tun (immer noch herausfinden, wie der Prozess genau funktioniert!). Hier ist der Codeausschnitt, der die Antwort angibt, die ich ursprünglich gefunden hatte:
(Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
Hintergrund:Innerhalb der WHERE-Klausel meiner Linq-Abfrage (daher ein Einzeiler) muss ich prüfen, ob datetime1 und datetime2 genau gleich sind.Die berücksichtigten Datums-/Uhrzeitwerte sind Stempeldaten für andere in der Abfrage verwendete Werte.