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)
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top