Antworten:
Nein, gibt es nicht. DateTimestellt einen Zeitpunkt dar, der sich aus einem Datum und einer Uhrzeit zusammensetzt. Sie können den Datumsteil jedoch über die DateEigenschaft abrufen (eine andere DateTimemit der eingestellten Zeit 00:00:00).
Und Sie können über einzelne Datumseigenschaften abrufen Day, Monthund 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.
datefür alles eine schlechte Idee ist, es sei denn, Sie sind zu 100% sicher, dass Ihre App immer nur in einer Zeitzone funktioniert. Speichern alles datetimebietet 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. Datetimekann Sie dort retten, kann es dateüberhaupt nicht und wird unglaublich schwer zu reparieren sein, wenn Sie jemals anfangen date, mit dem falschen Zeitzonenkontext aufzuschreiben.
Erstellen Sie eine Wrapper-Klasse. Etwas wie das:
public class Date:IEquatable<Date>,IEquatable<DateTime>
{
public Date(DateTime date)
{
value = date.Date;
}
public bool Equals(Date other)
{
return other != null && value.Equals(other.value);
}
public bool Equals(DateTime other)
{
return value.Equals(other);
}
public override string ToString()
{
return value.ToString();
}
public static implicit operator DateTime(Date date)
{
return date.value;
}
public static explicit operator Date(DateTime dateTime)
{
return new Date(dateTime);
}
private DateTime value;
}
Und entlarven valueSie , was immer Sie wollen.
DateTimeKind.Unspecifiedso 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.Unspecifiedda 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.
Das DateTime-Objekt verfügt über eine Eigenschaft, die nur den Datumsteil des Werts zurückgibt.
public static void Main()
{
System.DateTime _Now = DateAndTime.Now;
Console.WriteLine("The Date and Time is " + _Now);
//will return the date and time
Console.WriteLine("The Date Only is " + _Now.Date);
//will return only the date
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
DateTimemit der auf 0:00:00
Es gibt keinen DateDatentyp.
Sie können DateTime.Datejedoch nur das Datum abrufen.
Z.B
DateTime date = DateTime.Now.Date;
DateTime.Now.Dateist das gleiche wie DateTime.Today. Es gibt eine DateTime.UtcNow, die den Datums- / Uhrzeitwert als Weltzeit (UTC) zurückgibt, aber es gibt keine UTC-äquivalente Methode oder Eigenschaft für Heute. DateTimeKind.UtcNow.Dateist 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.
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 DateTimeTyp hat eine .DateEigenschaft, die den DateTimemit dem oben festgelegten Zeitwert zurückgibt .
public class AsOfdates
{
public string DisplayDate { get; set; }
private DateTime TheDate;
public DateTime DateValue
{
get
{
return TheDate.Date;
}
set
{
TheDate = value;
}
}
}
Sie können eine der folgenden Möglichkeiten ausprobieren:
DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();
Es gibt jedoch keinen "Datum" -Typ in der BCL.