TOC

This article has been localized into German by the community.

Datenarten:

Mit Datum & Zeit arbeiten

C# kommt mit einer wirklich großartigen Struktur zum Arbeiten mit Datum und Uhrzeit - es heißt DateTime. Es ist eigentlich kein Datentyp, aber ich habe es in dieses Kapitel aufgenommen, weil Sie oft selbst mit Daten und / oder Zeiten arbeiten, wenn Sie die DateTime-Struktur verwenden - manchmal genauso viel wie Sie mit Zeichenketten und Zahlen.

Beginnen wir mit der Instanziierung eines neuen DateTime-Objekts:

DateTime dt = new DateTime();
Console.WriteLine(dt.ToString());

Das Ergebnis ist jedoch ziemlich langweilig: 01-01-0001 00:00:00. Dies entspricht dem Feld DateTime.MinValue, aber DateTime hat mehr hilfreiche Eigenschaften - die interessanteste ist DateTime.Now:

DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString());

Es hinterlässt uns das aktuelle Datum und die Zeit, die oft sehr relevant sind - wir werden das in einigen der kommenden Beispiele sehen. In vielen Situationen möchten Sie jedoch ein bestimmtes Datum und eine bestimmte Uhrzeit darstellen. Glücklicherweise hat DateTime mehrere Konstruktoren, die uns dabei helfen. Hier ist ein Beispiel:

DateTime dt = new DateTime(2042, 12, 24);
Console.WriteLine(dt.ToString());

Die Reihenfolge der Parameter in diesem Konstruktor lautet Jahr, Monat, Tag. Dadurch erhalten wir ein DateTime-Objekt mit einem Datum, das Heiligabend im Jahr 2042 darstellt.

DateTime - mit oder ohne Zeit?

Aber was ist mit der Zeit? Nun, wenn Sie keine angeben, wird standardmäßig 00:00:00 verwendet, wie Sie in unserem vorherigen Beispiel sehen können. Sie können aber auch einfach eine Zeit angeben:

DateTime dt = new DateTime(2042, 12, 24, 18, 42, 0);
Console.WriteLine(dt.ToString());

Jetzt hat die DateTime auch eine Zeit, in diesem Fall um 18:42. Beachten Sie, dass die Stunden als eine Zahl zwischen 0 und 23 angegeben werden sollten, da wir die 24-Stunden-Uhr für die Eingabe verwenden, aber keine Sorge, wenn Sie es als 12-Stunden-Uhr mit AM / PM möchten - das ist einfach zu bewerkstelligen in der Ausgabe, wie wir später besprechen werden.

Die verbleibende Frage ist: Was tun, wenn Sie nur am Datumsteil interessiert sind? Die offensichtliche Antwort wäre, die Date-Klasse anstelle der DateTime-Klasse zu verwenden, aber tatsächlich gibt es keine solche Klasse. Stattdessen verfügt die DateTime-Klasse über eine Date-Eigenschaft:

DateTime dt = new DateTime(2042, 12, 24, 18, 42, 0);
DateTime date = dt.Date;
Console.WriteLine(date.ToString());

Wie Sie jedoch sehen werden, ist die Date-Eigenschaft auch ein DateTime-Objekt, bei dem der Zeitteil auf 00:00:00 gesetzt wurde. Das mag ein wenig verwirrend sein, aber es macht auch Sinn, weil DateTime immer nur als Container dienen soll, der die Daten enthält, die Sie auf vielfältige Weise an den Benutzer ausgeben können. Wir haben bereits die grundlegende ToString () -Methode verwendet, aber es gibt viele weitere Möglichkeiten, die Ausgabe eines DateTime-Objekts zu erhalten.

DateTime Ausgabe

Die Ausgabe einer DateTime ist einer der wichtigsten Aspekte, aber es kann auch eine komplizierte Aufgabe sein - es hängt wirklich von Ihren Bedürfnissen ab. Bisher haben wir die sehr einfache Version der Ausgabe gesehen: Der einfache Aufruf der ToString() -Methode. Dadurch werden Datum und Uhrzeit basierend auf der aktuellen Kultur der Anwendung ausgegeben, die standardmäßig auf den Systemeinstellungen basiert. Dies bedeutet, dass wenn Sie nur die ToString() -Methode aufrufen, das Datum und die Uhrzeit für den Benutzer auf eine Weise dargestellt werden, die für sie sinnvoll ist, egal wo auf der Welt sie sich befinden, da Ihnen das Format bekannt ist Datum und vor allem die Zeit variiert von Region zu Region.

Wenn Sie mehr Kontrolle über die Ausgabe wünschen, gibt es mehrere Möglichkeiten. Der schnellste Weg ist die Verwendung einer der To* Methoden, z.B.: die ToShortDateString() Methode:

Console.WriteLine(DateTime.Now.ToShortDateString());

Durch sie wird eine kurze Version des Datums ausgeben, wobei der Zeitteil vollständig weggelassen wird. Sie können auch die ToLongDateString() Methode verwenden:

Console.WriteLine(DateTime.Now.ToLongDateString());

Die Ausgabe variiert basierend auf den Regionseinstellungen, aber normalerweise enthält ein langes Datum eine Textdarstellung des Monats anstelle einer numerischen Darstellung.

Wenn Sie nach mehr Kontrolle suchen, beispielsweise weil Sie Ihre Datums- / Zeitinformationen an eine bestimmte Region anpassen möchten, können Sie eine der Überladungen der ToString() - Methode verwenden, z. indem Sie genau angeben, auf welche Kultur / Region Sie ausgerichtet sind:

var usCulture = new System.Globalization.CultureInfo("en-US");
Console.WriteLine(DateTime.Now.ToString(usCulture.DateTimeFormat));

Mit der CultureInfo-Klasse können Sie eine vollständige Info-Box zu einer Sprache abrufen, z. wie sie Datum und Uhrzeit schreiben (die CultureInfo-Klasse wird später in diesem Tutorial behandelt). Wir können diese Informationen dann an die DateTime-Klasse weiterleiten, um sie darüber zu informieren, dass wir eine visuelle Darstellung von Datum und Uhrzeit für die Übereinstimmung mit dieser Sprache wünschen. Was aber, wenn wir noch genauer über den Output sprechen wollen?

Standart Datum & Zeitformat Zeichenketten

Um noch mehr Kontrolle über die Ausgabe zu erhalten, können Sie das Standarddatum & Zeitformat-Zeichenfolgen verwenden, die von .NET Framework bereitgestellt werden. Es ist ein Buchstabe, der eine Art darstellt, das Datum und / oder die Uhrzeit anzuzeigen. Für die vollständige Liste schlage ich vor, dass Sie sich die Dokumentation ansehen, aber jetzt ein paar Beispiele:

DateTime dt = new DateTime(2042, 12, 24, 18, 42, 0);  

Console.WriteLine("Short date pattern (d): " + dt.ToString("d"));  
Console.WriteLine("Long date pattern (D): " + dt.ToString("D"));  
Console.WriteLine("Full date/time pattern (F): " + dt.ToString("F"));  
Console.WriteLine("Year/month pattern (y): " + dt.ToString("y"));

Die Ausgabe wird wie folgt aussehen:

Short date pattern (d):         24-12-2042
Long date pattern (D):  24. december 2042
Full date/time pattern (F):     24. december 2042 18:42:00
Year/month pattern (y): december 2042

Dies gibt Ihnen ein wenig mehr Kontrolle über die Ausgabe, aber manchmal ist das nicht genug - in diesen Fällen benötigen Sie benutzerdefinierte Formatierte Zeichenketten.

Benutzerdefinierte Datum & Zeit Zeichenketten

Zur vollständigen Kontrolle haben wir benutzerdefinierte Formatstrings. Sie sind eine Kombination aus Buchstaben und Sonderzeichen, die Sie an die ToString() -Methode übergeben, um das exakte -Format anzuzeigen, das Sie für Ihr Datum und / oder Ihre Uhrzeit benötigen, Zeitteile, wie Sie sie haben möchten und welche Art von Separatoren Sie verwenden möchten. Offensichtlich gibt dies Ihnen viele Optionen, so dass Sie für die vollständige Liste der verfügbaren Formatbezeichner die Dokumentation ansehen müssen, aber schauen wir uns ein Beispiel an, wie es funktioniert:

DateTime dt = new DateTime(2042, 12, 24, 18, 42, 0);

Console.WriteLine(dt.ToString("MM'/'dd yyyy"));
Console.WriteLine(dt.ToString("dd.MM.yyyy"));
Console.WriteLine(dt.ToString("MM.dd.yyyy HH:mm"));
Console.WriteLine(dt.ToString("dddd, MMMM (yyyy): HH:mm:ss"));
Console.WriteLine(dt.ToString("dddd @ hh:mm tt", System.Globalization.CultureInfo.InvariantCulture));

Die Ausgabe wird ähnlich aussehen wie diese:

12/24 2042
24.12.2042
12.24.2042 18:42
onsdag, december (2042): 18:42:00
Wednesday @ 06:42 PM

Im Allgemeinen erhalten ein oder mehrere d's eine Version des Tages, eine oder mehrere M geben Ihnen den Monat (Kleinbuchstaben m) für Minuten) und einige y geben Ihnen das Jahr. Um zu verstehen, was diese Formatbezeichner tun, schlage ich noch vor, dass Sie sich die Dokumentation ansehen, aber hoffentlich hat das obige Beispiel Ihnen eine gute Vorstellung davon gegeben, wie leistungsfähig die benutzerdefinierten Formatzeichenfolgen sind.

Daten analysieren

Bisher haben wir mit Daten gearbeitet, die direkt im Code definiert wurden, aber Sie werden wahrscheinlich schnell in eine Situation geraten, in der Sie mit einem vom Benutzer angegebenen Datum arbeiten müssen. Dies ist ein überraschend kompliziertes Thema, weil es so viele Möglichkeiten gibt, ein Datum zu schreiben. Das .NET-Framework kann Ihnen dabei helfen, da es alle Kulturen unterstützt, wie in den vorherigen Beispielen gezeigt, aber Sie müssen dem Benutzer dennoch helfen, das Datum in dem von Ihnen erwarteten Format anzugeben. Danach können Sie die Parse() - Methode verwenden, um eine benutzerdefinierte Zeichenfolge in ein DateTime-Objekt umzuwandeln:

var usCulture = new System.Globalization.CultureInfo("en-US");
Console.WriteLine("Please specify a date. Format: " + usCulture.DateTimeFormat.ShortDatePattern);
string dateString = Console.ReadLine();
DateTime userDate = DateTime.Parse(dateString, usCulture.DateTimeFormat);
Console.WriteLine("Date entered (long date format):" + userDate.ToLongDateString());

Dieses Beispiel ist eigentlich ziemlich cool, weil es zeigt, wie sehr uns das .NET-Framework helfen kann, solange wir eine Instanz der CultureInfo-Klasse haben, die wir benutzen wollen (in diesem Fall US-Englisch - und keine Sorge, wir werden die CultureInfo-Klasse später noch ausführlicher behandeln). Sobald wir dies haben, verwenden wir es, um dem Benutzer mitzuteilen, welches Format wir erwarten. Dann benutzen wir es erneut in der 4. Zeile, um die Eingabe tatsächlich zu analysieren. In der letzten Zeile geben wir das benutzerdefinierte Datum aus, diesmal nur mit dem vom System angegebenen Format.

Beachten Sie jedoch, dass die Methode Parse() sehr streng ist. Wenn der Benutzer das Datum nicht im erwarteten Format eingibt, wird eine Ausnahme ausgelöst. Aus diesem Grund ist es in der Regel eine gute Idee, stattdessen die Methode TryParse() zu verwenden - sie führt genau das gleiche aus, aber Sie können überprüfen, ob das Datum analysiert werden kann oder nicht, und sie wirft nicht sofort eine Ausnahme. Hier ist eine überarbeitete Version des vorherigen Beispiels:

var usCulture = new System.Globalization.CultureInfo("en-US");
Console.WriteLine("Please specify a date. Format: " + usCulture.DateTimeFormat.ShortDatePattern);
string dateString = Console.ReadLine();
DateTime userDate;
if (DateTime.TryParse(dateString, usCulture.DateTimeFormat, System.Globalization.DateTimeStyles.None, out userDate))
    Console.WriteLine("Valid date entered (long date format):" + userDate.ToLongDateString());
else
    Console.WriteLine("Invalid date specified!");

Zusammenfassung

Das Arbeiten mit Datum und Uhrzeit ist sehr wichtig, aber auch sehr komplex. Zum Glück ist uns das .NET-Framework in fast allen Situationen mit der brillanten DateTime-Klasse behilflich.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!