Ich versuche herauszufinden, ob ein Konto in weniger als 30 Tagen abläuft. Benutze ich DateTime Compare richtig?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Benutze ich DateTime Compare richtig?
Nein Compare
bietet nur Informationen über die relative Position von zwei Daten: kleiner, gleich oder größer. Was Sie wollen, ist ungefähr so:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
Dies subtrahiert zwei DateTime
s. Das Ergebnis ist ein TimeSpan
Objekt mit einer TotalDays
Eigenschaft.
Zusätzlich kann die Bedingung direkt geschrieben werden als:
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
Nicht if
benötigt.
TotalDays
anstelle von Tagen.Days
es die größte Komponente von istTimeSpan
. Leute, die dies lesen, können das extrapolieren, um zu glauben, dass dieSeconds
Eigenschaft genauso funktioniert.Days
selbst falsch sein kann.Days
undTotalDays
sind hier nur deshalb gleich, weil die Bedingung ist< 30
, aber es würde einen offensichtlichen Unterschied geben, wenn es wäre<= 30
, weilTotalDays
möglicherweise so etwas zurückgibt,30.421
währendDays
noch zurückkehrt30
.sollte sein
Beachten Sie die Gesamtzahl der Tage, sonst erhalten Sie werid Verhalten
quelle
TotalDays
ist ein konzeptionell korrektes Feld. In der Praxis liefern sie das gleiche Ergebnis, aber nur, weil diesDays
die größte Komponente von istTimeSpan
, wenn es eine Monats- oder Jahreskomponente gegeben hätte und dies eine andere Geschichte gewesen wäre. Versuchen Sie einfach mitHours
,Seconds
oderMilliseconds
um zu sehen , wie sie funktionieren.Nun, ich würde es stattdessen so machen:
Vergleichen antwortet nur mit einer Ganzzahl, die angibt, ob das erste früher, gleich oder später ist ...
quelle
Versuchen Sie dies stattdessen
quelle
Compare gibt 1, 0, -1 für größer als, gleich bzw. kleiner als zurück.
Sie wollen:
quelle
Dadurch erhalten Sie ein genaues Ergebnis:
quelle
Vergleichen ist nicht erforderlich , Tage / Gesamttage sind nicht erforderlich .
Alles was Sie brauchen ist
Beachten Sie, dass dies funktioniert, wenn Sie Minuten, Monate oder sogar Jahre als Ablaufkriterien verwenden.
quelle
Angenommen, Sie möchten
false
(falls zutreffend) zuweisenmatchtime
, wäre eine einfachere Schreibweise ..quelle
Nein, die Vergleichsfunktion gibt entweder 1, 0 oder -1 zurück. 0 Wenn die beiden Werte gleich sind, bedeuten -1 und 1 kleiner als und größer als, ich glaube an diese Reihenfolge, aber ich vermische sie oft.
quelle
Nein, Sie verwenden es nicht richtig.
Siehe hier für Details.
quelle
Sie möchten die beiden DateTimes (expiryDate und DateTime.Now) subtrahieren. Dies gibt ein Objekt vom Typ TimeSpan zurück. Der TimeSpan hat die Eigenschaft "Days". Vergleichen Sie diese Zahl mit 30 für Ihre Antwort.
quelle
Nein, es ist nicht korrekt. Versuchen Sie Folgendes:
quelle
Eigentlich hat keine dieser Antworten bei mir funktioniert. Ich habe es so gelöst:
Als ich das versuchte:
Heute, 2011-11-14 und mein Ablaufdatum war 2011-10-17. Ich habe das matchFound = -28. Anstelle von 28. Also habe ich den letzten Scheck umgekehrt.
quelle
quelle
Sie können versuchen, dies folgendermaßen zu tun:
quelle