Geschichte der Frage:
Die Arbeit mit Datum und Uhrzeit war schon immer ein separater Aspekt der Programmierung in Visual Basic — von den alten Typen Variant/Date in VB6 bis zu den Strukturen Date/DateTime in VB.NET. Die Einführung der Klasse DateTime ermöglichte eine flexiblere Handhabung von Daten, das Abrufen von Systemwerten, das Berechnen von Intervallen und das korrekte Formatieren von Daten.
Problem:
Häufig treten Fehler bei der Umwandlung von Strings in DateTime auf (insbesondere bei unterschiedlichen lokalen Einstellungen), falsche Handhabung von Zeitzonen, falsches Formatieren für die Anzeige an den Benutzer oder für den Versand an den Server.
Lösung:
DateTime ist eine Struktur, die das Speichern von Datum und Uhrzeit ermöglicht, arithmetische Operationen, Vergleiche sowie die Umwandlung in das gewünschte Format erlaubt. Zum Parsen von Datumsstrings werden Parse, TryParse verwendet, und für die Formatierung die Methode ToString mit einer Formatzeichenfolge und (optional) CultureInfo.
Beispielcode:
Dim today As DateTime = DateTime.Now Dim birth As DateTime = New DateTime(1990, 1, 1) Dim formatted As String = today.ToString("yyyy-MM-dd HH:mm") Dim parsed As DateTime If DateTime.TryParse("15/06/2024", parsed) Then Console.WriteLine(parsed.ToString()) End If
Wichtige Merkmale:
1. Was ist DateTime.MinValue?
DateTime.MinValue ist das Datum 01.01.0001 00:00:00 (und nicht beispielsweise 01.01.1970 wie bei UNIX). Seien Sie vorsichtig bei der Überprüfung, ob „ein Wert gesetzt ist“.
2. Kann man „24 Stunden ohne Zeit“ in DateTime speichern?
Nein, der Typ DateTime enthält immer Zeitwerte. Wenn Sie nur das Datum speichern möchten, setzen Sie die Zeit auf „00:00:00“ und verwenden Sie nur das Datumsformat bei der Ausgabe.
3. Wie vergleicht man Daten korrekt, ohne die Zeit zu berücksichtigen?
Um nur den Datumsanteil zu vergleichen, entfernen Sie die Zeit:
Dim aDate As DateTime = DateTime.Now.Date Dim bDate As DateTime = someOtherDate.Date If aDate = bDate Then ...
Die Client-Anwendung nimmt das Geburtsdatum des Benutzers über TextBox entgegen und parst es direkt mit DateTime.Parse(textBox.Text). Europäische und amerikanische Benutzer geben Daten in unterschiedlichen Formaten ein. Infolgedessen erhält man falsche Geburtsdaten oder Ausnahmen.
Vorteile:
Nachteile:
Die Eingabe des Datums erfolgt über DateTimePicker oder mittels TryParseExact(textBox.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture, ...). Im Code sind Fallback-Mechanismen und genaue Validierung vorgesehen.
Vorteile:
Nachteile: