Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beim Analysieren von Zeichenfolgen, um sie in DateTime-Objekte zu konvertieren, müssen Informationen darüber angegeben werden, wie Daten und Zeiten textlich dargestellt sind. Verschiedene Kulturen verwenden unterschiedliche Bestellungen für Tag, Monat und Jahr. Einige Zeitdarstellungen verwenden eine 24-Stunden-Uhr, andere geben "AM" und "PM" an. Einige Anwendungen benötigen nur das Datum. Andere brauchen nur die Zeit. Andere müssen sowohl das Datum als auch die Uhrzeit angeben. Mit den Methoden, mit denen Zeichenfolgen in DateTime Objekte konvertiert werden, können Sie detaillierte Informationen zu den erwarteten Formaten sowie zu den Elementen eines Datums und einer Uhrzeit bereitstellen, die Ihre Anwendung benötigt. Es gibt drei Unteraufgaben, um Text korrekt in eine DateTime zu konvertieren.
- Sie müssen das erwartete Format des Texts angeben, der ein Datum und eine Uhrzeit darstellt.
- Sie können die Kultur für das Format einer Datumszeit angeben.
- Sie können angeben, wie fehlende Komponenten in der Textdarstellung im Datum und der Uhrzeit festgelegt werden.
Die Methoden Parse und TryParse konvertieren viele allgemeine Darstellungen eines Datums und einer Uhrzeit. Die Methoden ParseExact und TryParseExact konvertieren eine Zeichenfolgendarstellung, die dem Muster entspricht, das durch eine Datums- und Uhrzeitformatzeichenfolge angegeben wird. Weitere Informationen finden Sie in den Artikeln zu Standardmäßigen Datums- und Uhrzeitformatzeichenfolgen sowie benutzerdefinierten Datums- und Uhrzeitformatzeichenfolgen.
Das aktuelle DateTimeFormatInfo Objekt bietet mehr Kontrolle darüber, wie Text als Datum und Uhrzeit interpretiert werden soll. Eigenschaften einer DateTimeFormatInfo beschreiben die Trennzeichen für Datum und Uhrzeit, die Namen der Monate, Tage und Zeitalter sowie das Format für die Bezeichnungen "AM" und "PM". Das von CultureInfo.CurrentCulture zurückgegebene CultureInfo hat eine Eigenschaft namens CultureInfo.DateTimeFormat, die die aktuelle Kultur darstellt. Wenn Sie eine bestimmte Kultur oder benutzerdefinierte Einstellungen verwenden möchten, geben Sie den IFormatProvider Parameter einer Analysemethode an. Geben Sie für den IFormatProvider Parameter ein CultureInfo Objekt an, das eine Kultur oder ein DateTimeFormatInfo Objekt darstellt.
Der Text, der ein Datum oder eine Uhrzeit darstellt, könnte möglicherweise einige Informationen fehlen. Die meisten Personen würden beispielsweise davon ausgehen, dass das Datum "12. März" das aktuelle Jahr darstellt. Ebenso stellt "März 2018" den Monat März im Jahr 2018 dar. Text, der die Zeit darstellt, enthält häufig nur Stunden, Minuten und eine AM/PM-Bezeichnung. Die Analysemethoden behandeln diese fehlenden Informationen mithilfe angemessener Standardwerte:
- Wenn nur die Uhrzeit vorhanden ist, verwendet der Datumsteil das aktuelle Datum.
- Wenn nur das Datum vorhanden ist, ist der Zeitteil Mitternacht.
- Wenn das Jahr nicht in einem Datum angegeben ist, wird das aktuelle Jahr verwendet.
- Wenn der Tag des Monats nicht angegeben ist, wird der erste Tag des Monats verwendet.
Wenn das Datum in der Zeichenfolge vorhanden ist, muss es den Monat und entweder den Tag oder das Jahr enthalten. Wenn die Uhrzeit vorhanden ist, muss sie die Stunde und entweder die Minuten oder den AM/PM-Kennzeichner enthalten.
Sie können die NoCurrentDateDefault Konstante angeben, die diese Standardwerte außer Kraft setzen soll. Wenn Sie diese Konstante verwenden, werden alle fehlenden Eigenschaften für Jahr, Monat oder Tag auf den Wert 1festgelegt. Im letzten Beispiel wird Parse dieses Verhalten veranschaulicht.
Zusätzlich zu einer Datums- und Uhrzeitkomponente kann die Zeichenfolgendarstellung eines Datums und einer Uhrzeit einen Offset enthalten, der angibt, wie viel sich die Uhrzeit von koordinierter Weltzeit (UTC) unterscheidet. Beispielsweise definiert die Zeichenfolge "2.14.2007 5:32:00 -7:00" eine Zeit, die sieben Stunden vor UTC liegt. Wenn ein Offset aus der Zeichenfolgendarstellung einer Zeit weggelassen wird, gibt die Analyse ein DateTime-Objekt zurück, dessen Kind-Eigenschaft auf DateTimeKind.Unspecified festgelegt ist. Wenn ein Offset angegeben ist, gibt die Analyse ein DateTime-Objekt zurück, dessen Kind-Eigenschaft auf DateTimeKind.Local festgelegt ist. Der Wert wird auch an die lokale Zeitzone Ihres Computers angepasst. Sie können dieses Verhalten ändern, indem Sie einen DateTimeStyles Wert mit der Analysemethode verwenden.
Der Formatanbieter wird auch verwendet, um ein mehrdeutiges numerisches Datum zu interpretieren. Es ist unklar, welche Komponenten des Datums durch die Zeichenfolge "02/03/04" dargestellt werden, insbesondere was den Monat, den Tag und das Jahr betrifft. Die Komponenten werden gemäß der Reihenfolge ähnlicher Datumsformate im Formatanbieter interpretiert.
Parse
Das folgende Beispiel veranschaulicht die Verwendung der DateTime.Parse Methode zum Konvertieren einer string in eine DateTime. In diesem Beispiel wird die kultur verwendet, die dem aktuellen Thread zugeordnet ist. Wenn die CultureInfo der aktuellen Kultur die Eingabezeichenfolge nicht analysieren kann, wird ein FormatException Fehler ausgelöst.
Hinweis
Diese Beispiele sind im GitHub-Dokument-Repository für C# und Visual Basic verfügbar.
string dateInput = "Jan 1, 2009";
var parsedDate = DateTime.Parse(dateInput);
Console.WriteLine(parsedDate);
// Displays the following output on a system whose culture is en-US:
// 1/1/2009 00:00:00
Dim MyString As String = "Jan 1, 2009"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
' Displays the following output on a system whose culture is en-US:
' 1/1/2009 00:00:00
Sie können auch die Kultur explizit definieren, deren Formatierungskonventionen beim Analysieren einer Zeichenfolge verwendet werden. Sie geben eines der Standardobjekte DateTimeFormatInfo an, die von der CultureInfo.DateTimeFormat Eigenschaft zurückgegeben werden. Im folgenden Beispiel wird ein Formatanbieter verwendet, um eine deutsche Zeichenfolge in eine DateTimezu analysieren. Es erstellt ein CultureInfo, das die de-DE-Kultur repräsentiert. Dieses CultureInfo Objekt stellt eine erfolgreiche Analyse dieser bestimmten Zeichenfolge sicher. Dieser Prozess verhindert jede Einstellung im CurrentCulture des CurrentThread.
var cultureInfo = new CultureInfo("de-DE");
string dateString = "12 Juni 2008";
var dateTime = DateTime.Parse(dateString, cultureInfo);
Console.WriteLine(dateTime);
// The example displays the following output:
// 6/12/2008 00:00:00
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
' The example displays the following output:
' 6/12/2008 00:00:00
Sie können jedoch Überladungen der Parse Methode verwenden, um benutzerdefinierte Formatanbieter anzugeben. Die Parse Methode unterstützt die Analyse von nicht standardmäßigen Formaten nicht. Verwenden Sie stattdessen die ParseExact Methode, um ein Datum und eine Uhrzeit zu analysieren, die in einem nicht standardmäßigen Format ausgedrückt wird.
Im folgenden Beispiel wird die DateTimeStyles Enumeration verwendet, um anzugeben, dass die aktuellen Datums- und Uhrzeitinformationen nicht zu DateTime den nicht angegebenen Feldern hinzugefügt werden sollen.
var cultureInfo = new CultureInfo("de-DE");
string dateString = "12 Juni 2008";
var dateTime = DateTime.Parse(dateString, cultureInfo,
DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(dateTime);
// The example displays the following output if the current culture is en-US:
// 6/12/2008 00:00:00
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo,
DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
' The example displays the following output if the current culture is en-US:
' 6/12/2008 00:00:00
ParseExact
Die DateTime.ParseExact Methode konvertiert eine Zeichenfolge in ein DateTime Objekt, wenn sie einem der angegebenen Zeichenfolgenmuster entspricht. Wenn eine Zeichenfolge, die keiner der angegebenen Formulare ist, an diese Methode übergeben wird, wird eine FormatException ausgelöst. Sie können einen der Standard-Datums- und Uhrzeitformatbezeichner oder eine Kombination der benutzerdefinierten Formatbezeichner angeben. Mithilfe der benutzerdefinierten Formatbezeichner können Sie eine benutzerdefinierte Erkennungszeichenfolge erstellen. Eine Erläuterung der Bezeichner finden Sie in den Artikeln zu Standardzeichenfolgen für Datums- und Uhrzeitformat sowiebenutzerdefinierte Zeichenfolgen im Datums- und Uhrzeitformat.
Im folgenden Beispiel wird der DateTime.ParseExact-Methode ein Zeichenfolgenobjekt übergeben, das analysiert werden soll, gefolgt von einem Formatspezifizierer und einem CultureInfo-Objekt. Diese ParseExact Methode kann nur Zeichenfolgen analysieren, die dem langen Datumsmuster in der en-US Kultur folgen.
var cultureInfo = new CultureInfo("en-US");
string[] dateStrings = { " Friday, April 10, 2009", "Friday, April 10, 2009" };
foreach (string dateString in dateStrings)
{
try
{
var dateTime = DateTime.ParseExact(dateString, "D", cultureInfo);
Console.WriteLine(dateTime);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{dateString}'");
}
}
// The example displays the following output:
// Unable to parse ' Friday, April 10, 2009'
// 4/10/2009 00:00:00
Dim MyCultureInfo As New CultureInfo("en-US")
Dim MyString() As String = {" Friday, April 10, 2009", "Friday, April 10, 2009"}
For Each dateString As String In MyString
Try
Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D",
MyCultureInfo)
Console.WriteLine(MyDateTime)
Catch e As FormatException
Console.WriteLine("Unable to parse '{0}'", dateString)
End Try
Next
' The example displays the following output:
' Unable to parse ' Friday, April 10, 2009'
' 4/10/2009 00:00:00
Jede Überladung der Parse und ParseExact Methoden enthält auch einen IFormatProvider Parameter, der kulturspezifische Informationen zur Formatierung der Zeichenfolge bereitstellt. Das IFormatProvider Objekt ist ein CultureInfo Objekt, das eine Standardkultur oder ein DateTimeFormatInfo Objekt darstellt, das von der CultureInfo.DateTimeFormat Eigenschaft zurückgegeben wird. ParseExact verwendet auch ein zusätzliches Argument, entweder als Zeichenfolge oder Zeichenfolgenarray, das ein oder mehrere benutzerdefinierte Datums- und Uhrzeitformate definiert.