Wie vergleiche ich DateTime in C #?

137

Ich möchte nicht, dass der Benutzer das Datum oder die Uhrzeit zurückgibt.

Wie kann ich vergleichen, ob das eingegebene Datum und die eingegebene Uhrzeit WENIGER als die aktuelle Uhrzeit sind?

Wenn das aktuelle Datum und die aktuelle Uhrzeit der 17. Juni 2010, 12:25 Uhr, ist, möchte ich, dass der Benutzer kein Datum vor dem 17. Juni 2010 und keine Uhrzeit vor 12:25 Uhr angeben kann.

Wie meine Funktion return false, wenn die vom Benutzer eingegebene Zeit der 16. Juni 2010 und die Zeit 12:24 Uhr ist

Ashish Ashu
quelle

Antworten:

179

MSDN: DateTime.Compare

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
// The example displays the following output:
//    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM
Ahmet Kakıcı
quelle
3
Ihre Antwort bietet eine Möglichkeit, den Unterschied zu erkennen, anstatt nur zu wissen, dass das Datum vorher oder nachher liegt. Natürlich ist seine Antwort besser für das OP, aber Ihre ist besser für einige Leute, die von Google hierher gekommen sind (selbst eingeschlossen).
Levininja
2
Ich fand Ihre Antwort wertvoll, weil ich mir einen Legacy-Code ansehe, in dem dieser verwendet wird
Erik Bergstedt
Hier ist der MSDN-Link
Harsh Raj
Aus Debug-Sicht ist die Antwort von MuSTaNG jedoch besser lesbar.
Himalaya Garg
295

Microsoft hat auch die Operatoren '<' und '>' implementiert. Sie verwenden diese also, um zwei Daten zu vergleichen.

if (date1 < DateTime.Now)
   Console.WriteLine("Less than the current time!");
Mustang
quelle
6
Quell-MSDN; Diese werden als DateTime-Operatoren dokumentiert, die ungeschickt als "DateTime.Greater than", "DateTime.LessThanOrEqualTo" ..... msdn.microsoft.com/en-us/library/ff986512%28v=vs.90%29.aspx
Salman Siddiqui
2
Ich verwende Unity 2017 und die Verwendung dieses Operators zum Sortieren von Listen führt zu falschen Ergebnissen. Ich habe sogar versucht, DateTime.ticks direkt zu vergleichen, und das ist auch fehlgeschlagen. Ich musste DateTime.CompareTo verwenden, um die richtigen Ergebnisse zu erzielen, und ich weiß nicht warum.
Lin
2
Das ist falsch. Dies kann UTC und Ortszeit nicht richtig vergleichen.
Altiano Gerung
4
Dies ist keine vollständige Antwort. Wenn Sie DateTime Kind in Betracht ziehen, sollte es entweder date1.ToLocalTime() < DateTime.Nowoder sein date1.ToUniversalTime() < DateTime.UtcNow.
Yurislav
21

Die Antwort von MuSTaNG sagt alles, aber ich füge sie noch hinzu, um sie etwas ausführlicher zu gestalten, mit Links und allem.


Die konventionellen Betreiber

sind DateTimeseit .NET Framework 1.1 verfügbar . Das Addieren und Subtrahieren von DateTimeObjekten ist auch unter Verwendung herkömmlicher Operatoren +und möglich -.

Ein Beispiel aus MSDN:

Gleichberechtigung:
System.DateTime april19 = new DateTime(2001, 4, 19);
System.DateTime otherDate = new DateTime(1991, 6, 5);

// areEqual gets false.
bool areEqual = april19 == otherDate;

otherDate = new DateTime(2001, 4, 19);
// areEqual gets true.
areEqual = april19 == otherDate;

Andere Operatoren können ebenfalls verwendet werden.

Hier ist die Liste aller Operatoren , für die verfügbar ist DateTime.

Sнаđошƒаӽ
quelle
1
Sie können einfach ihre Antwort bearbeiten, um sie auszuarbeiten. In jedem Fall können Sie nicht +für zwei DateTimeOperanden verwenden, die Sie ausführen können DateTime - DateTime, oder DateTime + TimeSpan, oder DateTime - TimeSpan.
Joey
5

Im Allgemeinen müssen Sie DateTimesmit dem gleichen vergleichen Kind:

if (date1.ToUniversalTime() < date2.ToUniversalTime())
    Console.WriteLine("date1 is earlier than date2");

Erklärung von MSDN über DateTime.Compare(Dies gilt auch für die Betreiber wie >, <, ==usw.):

Um die Beziehung von t1 zu t2 zu bestimmen, vergleicht die Compare-Methode die Ticks-Eigenschaft von t1 und t2, ignoriert jedoch deren Kind-Eigenschaft . Stellen Sie vor dem Vergleichen von DateTime-Objekten sicher, dass die Objekte Zeiten in derselben Zeitzone darstellen.

Ein einfacher Vergleich kann daher zu einem unerwarteten Ergebnis führen, wenn damit umgegangen wird DateTimes, die in verschiedenen Zeitzonen dargestellt werden.

AlbertK
quelle
Hatte gerade einen Fehler deswegen ... mit dem sie dachten, als sie diese Methode machten :(
Legolas
2

Wenn Sie zwei DateTime haben, die gleich aussehen, aber Compare or Equals nicht das zurückgibt, was Sie erwarten, können Sie sie auf diese Weise vergleichen.

Hier ein Beispiel mit einer Genauigkeit von 1 Millisekunde:

bool areSame = (date1 - date2) > TimeSpan.FromMilliseconds(1d);
Yannick Triqueneaux
quelle
1
//Time compare.
private int CompareTime(string t1, string t2)
{
    TimeSpan s1 = TimeSpan.Parse(t1);
    TimeSpan s2 = TimeSpan.Parse(t2);
    return s2.CompareTo(s1);
}
Dieu Phan Dinh
quelle
2
Er will DateTimenicht vergleichenstring
Danh
Sie können datetime in string konvertieren
Dieu Phan Dinh
oder: Sie können verwenden: DateTime.Compare (startDate, endDate)
Dieu Phan Dinh
Nicht mein Problem und ist es ein Unterschied zu Ahmet ?
Danh
0

Hier ist ein typisches einfaches Beispiel im Unity-Milieu

using UnityEngine;

public class Launch : MonoBehaviour
{
    void Start()
    {
        Debug.Log("today " + System.DateTime.Now.ToString("MM/dd/yyyy"));

        // don't allow the app to be run after June 10th
        System.DateTime lastDay = new System.DateTime(2020, 6, 10);
        System.DateTime today = System.DateTime.Now;

        if (lastDay < today) {
            Debug.Log("quit the app");
            Application.Quit();
        }
        UnityEngine.SceneManagement.SceneManager.LoadScene("Welcome");
    }
}
Fattie
quelle
-3
public static bool CompareDateTimes(this DateTime firstDate, DateTime secondDate) 
{
   return firstDate.Day == secondDate.Day && firstDate.Month == secondDate.Month && firstDate.Year == secondDate.Year;
}
Majid Bajwa
quelle
4
In .NET bedeutet "Vergleichen" normalerweise "relativer Vergleich" und nicht "Gleichheitsprüfung". Die Frage hier war über den relativen Vergleich. Außerdem haben Sie keine Anstrengungen unternommen, um den Code richtig zu formatieren.
Lasse V. Karlsen