Ich arbeite an einem Programm, für dessen Rückgabe das Datum eines Ereignisses erforderlich ist.
Ich suche ein Date
, kein DateTime
.
Gibt es einen Datentyp, der nur das Datum zurückgibt?
Nein, gibt es nicht. DateTime
stellt einen Zeitpunkt dar, der sich aus einem Datum und einer Uhrzeit zusammensetzt. Sie können den Datumsteil jedoch über die Date
Eigenschaft abrufen (eine andere DateTime
mit der eingestellten Zeit 00:00:00
).
Und Sie können über einzelne Datumseigenschaften abrufen Day
, Month
und Year
.
Ich habe eine einfache Datumsstruktur für Zeiten erstellt, in denen Sie ein einfaches Datum benötigen, ohne sich um Zeitanteil, Zeitzonen, lokale oder utc usw. kümmern zu müssen.
Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");
independenceDay.ToLongString(); // "Thursday, July 4, 2013"
independenceDay.ToShortString(); // "7/4/2013"
independenceDay.ToString(); // "7/4/2013"
independenceDay.ToString("s"); // "2013-07-04"
int july = independenceDay.Month; // 7
Leider nicht in der .Net BCL. Daten werden normalerweise als DateTime-Objekt dargestellt, wobei die Zeit auf Mitternacht festgelegt ist.
Wie Sie sich vorstellen können, bedeutet dies, dass Sie alle damit verbundenen Zeitzonenprobleme haben, obwohl Sie für ein Datumsobjekt absolut keine Zeitzonenbehandlung wünschen.
quelle
date
für alles eine schlechte Idee ist, es sei denn, Sie sind zu 100% sicher, dass Ihre App immer nur in einer Zeitzone funktioniert. Speichern allesdatetime
bietet Ihnen das Beste aus beiden Welten, der Kritik am meisten darunter, eine einfache Möglichkeit zu vermeiden Zeitzone Alpträume , wenn der Server die Zeitzone configs jemals ändern ... und beginnt das Schreiben von Daten in einer Weise , Sie nicht zu antizipieren.Datetime
kann Sie dort retten, kann esdate
überhaupt nicht und wird unglaublich schwer zu reparieren sein, wenn Sie jemals anfangendate
, mit dem falschen Zeitzonenkontext aufzuschreiben.Erstellen Sie eine Wrapper-Klasse. Etwas wie das:
Und entlarven
value
Sie , was immer Sie wollen.quelle
DateTimeKind.Unspecified
so setzt, dass es bei der Serialisierung ohne Konvertierung deserialisiert wird (das Datum kann sich je nach Zeitzone ändern).DateTimeKind.Utc
. Stellen Sie es nicht auf ein,DateTimeKind.Unspecified
da dies garantiert, dass es mit einem enthaltenen Zeitzonenversatz serialisiert / deserialisiert wird! Ein Kalenderdatum ist unabhängig von der Zeitzone gleich. Lassen Sie es daher nicht vom System anpassen.Der Datumstyp ist nur ein Alias des von VB.NET verwendeten DateTime-Typs (wie int zu Integer wird). Beide Typen verfügen über eine Date-Eigenschaft, die Ihnen das Objekt mit dem auf 00:00:00 festgelegten Zeitteil zurückgibt.
quelle
DateTime verfügt über eine Date- Eigenschaft, mit der Sie den Datumsteil isolieren können. Die ToString- Methode leistet auch gute Arbeit darin, den Datumsteil nur anzuzeigen, wenn der Zeitteil leer ist.
quelle
Das DateTime-Objekt verfügt über eine Eigenschaft, die nur den Datumsteil des Werts zurückgibt.
quelle
DateTime
mit der auf 0:00:00Es gibt keinen
Date
Datentyp.Sie können
DateTime.Date
jedoch nur das Datum abrufen.Z.B
quelle
DateTime.Now.Date
ist das gleiche wieDateTime.Today
. Es gibt eineDateTime.UtcNow
, die den Datums- / Uhrzeitwert als Weltzeit (UTC) zurückgibt, aber es gibt keine UTC-äquivalente Methode oder Eigenschaft für Heute.DateTimeKind.UtcNow.Date
ist der passende Ausdruck.Sie können DateTime zurückgeben, wobei der Zeitabschnitt 00:00:00 ist, und ihn einfach ignorieren. Die Datumsangaben werden als Zeitstempel-Ganzzahlen behandelt, daher ist es sinnvoll, das Datum mit der Uhrzeit zu kombinieren, da diese ohnehin in der Ganzzahl vorhanden ist.
quelle
Dazu müssen Sie das Datum verwenden, den Zeitwert jedoch ignorieren.
Normalerweise ist ein Datum eine DateTime mit der Uhrzeit von
00:00:00
Der
DateTime
Typ hat eine.Date
Eigenschaft, die denDateTime
mit dem oben festgelegten Zeitwert zurückgibt .quelle
quelle
Sie können eine der folgenden Möglichkeiten ausprobieren:
Es gibt jedoch keinen "Datum" -Typ in der BCL.
quelle