Verarbeiten von Zeichenfolgen für Datum und Uhrzeit

Aktualisiert: November 2007

Analysemethoden konvertieren die Zeichenfolgendarstellung eines Datums und einer Uhrzeit in ein entsprechendes DateTime-Objekt. Die Parse-Methode und die TryParse-Methode konvertieren alle gemeinsamen Darstellungen eines Datums und einer Uhrzeit. Die ParseExact-Methode und die TryParseExact-Methode konvertieren eine Zeichenfolgendarstellung, die genau mit dem von einer Formatzeichenfolge für Datum und Uhrzeit angegebenen Muster übereinstimmt.

Die Verarbeitung wird durch die Eigenschaften eines Formatanbieters beeinflusst, der Informationen wie die Trennzeichen für Datumsangaben und Zeitangaben sowie die Namen von Monaten, Tagen und Zeiträumen bereitstellt. Der Formatanbieter ist das aktuelle DateTimeFormatInfo-Objekt, das implizit durch die aktuelle Threadkultur oder explizit durch den IFormatProvider-Parameter einer Analysemethode bereitgestellt wird. Geben Sie für den IFormatProvider-Parameter ein CultureInfo-Objekt an, das eine Kultur oder ein DateTimeFormatInfo-Objekt darstellt.

Die Zeichenfolgendarstellung eines zu verarbeitenden Datums muss den Monat und zumindest einen Tag oder ein Jahr enthalten. Die Zeichenfolgendarstellung einer Uhrzeit muss die Stunde und zumindest die Minuten oder den AM/PM-Indikator enthalten. Bei der Verarbeitung werden jedoch Standardwerte für weggelassene Komponenten bereitgestellt, sofern dies möglich ist. Für ein fehlendes Datum wird standardmäßig das aktuelle Datum angegeben, für ein fehlendes Jahr das aktuelle Jahr und für einen fehlenden Tag eines Monats der erste Tag des Monats. Für eine fehlende Uhrzeit wird standardmäßig Mitternacht angegeben.

Falls die Zeichenfolgendarstellung nur eine Uhrzeit angibt, wird bei der Verarbeitung ein DateTime-Objekt zurückgegeben, dessen Eigenschaften Year, Month und Day auf die entsprechenden Werte der Today-Eigenschaft festgelegt sind. Ist jedoch die NoCurrentDateDefault-Konstante in der Analysemethode angegeben, werden die Eigenschaften für Jahr, Monat und Tag auf den Wert 1 festgelegt.

Außer einer Datums- und Uhrzeitkomponente kann die Zeichenfolgendarstellung eines Datums oder einer Uhrzeit auch einen Offset umfassen, der angibt, inwieweit die Uhrzeit von der koordinierten Weltzeit (Coordinated Universal Time, UTC) abweicht. So definiert zum Beispiel die Zeichenfolge "2/14/2007 5:32:00 -7:00" eine Uhrzeit, die sieben Stunden vor der koordinierten Weltzeit (UTC) liegt. Falls ein Offset in der Zeichenfolgendarstellung einer Uhrzeit weggelassen wurde, wird bei der Verarbeitung ein DateTime-Objekt zurückgegeben, dessen Kind-Eigenschaft auf DateTimeKind.Unspecified festgelegt ist. Wenn ein Offset angegeben ist, wird bei der Verarbeitung ein DateTime-Objekt zurückgegeben, dessen Kind-Eigenschaft auf Local festgelegt und dessen Wert an die lokale Zeitzone des Computers angepasst ist. Sie können dieses Verhalten ändern, indem Sie gemeinsam mit der Analysemethode eine DateTimeStyles-Konstante verwenden.

Mit dem Formatanbieter werden auch mehrdeutige numerische Daten interpretiert. So ist beispielsweise nicht eindeutig, bei welchen Komponenten des durch die Zeichenfolge "02/03/04" dargestellten Datums es sich um den Monat, den Tag und das Jahr handelt. In diesem Fall werden die Komponenten entsprechend der Reihenfolge ähnlicher Datumsformate im Formatanbieter interpretiert.

Parse

Der folgende Beispielcode veranschaulicht die Verwendung der Parse-Methode, um eine Zeichenfolge in eine DateTime zu konvertieren. Um die Verarbeitung durchzuführen, wird die Kultur verwendet, die dem aktuellen Thread zugeordnet ist. Wenn die der aktuellen Kultur zugeordnete CultureInfo die eingegebene Zeichenfolge nicht verarbeiten kann, wird eine FormatException ausgelöst.

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 12:00:00 AM
string MyString = "Jan 1, 2009";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);
// Displays the following output on a system whose culture is en-US:
//       1/1/2009 12:00:00 AM

Sie können auch eine CultureInfo angeben, die auf eine der vom Objekt definierten Kulturen festgelegt ist, oder Sie können eines der standardmäßigen DateTimeFormatInfo-Objekte angeben, die von der CultureInfo.DateTimeFormat-Eigenschaft zurückgegeben werden. Im folgenden Beispielcode wird ein Formatanbieter verwendet, um eine deutsche Zeichenfolge in eine DateTime umzuwandeln. Eine CultureInfo, die die Kultur de-DE repräsentiert, wird zusammen mit der verarbeiteten Zeichenfolge definiert und übergeben, um eine erfolgreiche Verarbeitung dieser bestimmten Zeichenfolge zu gewährleisten. Dadurch wird die unter CurrentCulture des CurrentThread vorhandene Einstellung irrelevant.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
      Console.WriteLine(MyDateTime);
   }
}
// The example displays the following output:
//       6/12/2008 12:00:00 AM

Obwohl Sie Überladungen der Parse-Methode zum Festlegen von benutzerdefinierten Formatanbietern verwenden können, unterstützt die Methode nur die Verwendung standardmäßiger Formatanbieter und keiner anderen. Um ein Datum und eine Uhrzeit in einem nicht standardmäßigen Format zu verarbeiten, verwenden Sie stattdessen die ParseExact-Methode.

Im folgenden Codebeispiel wird die DateTimeStyles-Enumeration verwendet, um festzulegen, dass die aktuellen Informationen zu Datum und Uhrzeit nicht in Felder für DateTime eingetragen werden, die durch die Zeichenfolge nicht definiert werden.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, _
                                   DateTimeStyles.NoCurrentDateDefault)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output if the current culture is en-US:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = 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 12:00:00 AM

ParseExact

Die DateTime.ParseExact-Methode konvertiert eine Zeichenfolge, die mit einem bestimmten Zeichenfolgenmuster eines DateTime-Objekts übereinstimmt. Wenn eine Zeichenfolge, die nicht der angegebenen Form entspricht, an diese Methode übergeben wird, wird eine FormatException ausgelöst. Sie können einen der gebräuchlichen Formatbezeichner für Datum und Uhrzeit oder eine begrenzte Kombination benutzerdefinierter Formatbezeichner angeben. Mithilfe der benutzerdefinierten Formatbezeichner können Sie Zeichenfolgen mit benutzerdefinierter Erkennung konstruieren. Weitere Informationen zu den Bezeichnern finden Sie im Abschnitt über Formatzeichenfolgen für Datum und Uhrzeit.

Jede Überladung der ParseExact-Methode verfügt außerdem über einen IFormatProvider-Parameter, der normalerweise kulturspezifische Daten zur Formatierung der Zeichenfolge enthält. In der Regel handelt es sich bei diesem IFormatProvider-Objekt um ein CultureInfo-Objekt, das eine Standardkultur darstellt, oder ein DateTimeFormatInfo-Objekt, das von der CultureInfo.DateTimeFormat-Eigenschaft zurückgegeben wird. Im Gegensatz zu anderen Verarbeitungsfunktionen für Datum und Uhrzeit unterstützt diese Methode jedoch auch einen IFormatProvider, der nicht standardmäßige Datums- und Uhrzeitformate definiert.

Im folgenden Codebeispiel wird der ParseExact-Methode ein Zeichenfolgenobjekt zur Verarbeitung übergeben, gefolgt von einem Formatbezeichner und einem CultureInfo-Objekt. Diese ParseExact-Methode kann nur Zeichenfolgen im langen Datumsformat verarbeiten, das in der Kultur en-US verwendet wird.

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = 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
   End Sub
End Module
' The example displays the following output:
'       Unable to parse ' Friday, April 10, 2009'
'       4/10/2009 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("en-US");
      string[] MyString = {" Friday, April 10, 2009", "Friday, April 10, 2009"};
      foreach (string dateString in MyString)
      {
         try {
            DateTime MyDateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo);
            Console.WriteLine(MyDateTime);
         }
         catch (FormatException) {
            Console.WriteLine("Unable to parse '{0}'", dateString);
         }
      }
   }
}
// The example displays the following output:
//       Unable to parse ' Friday, April 10, 2009'
//       4/10/2009 12:00:00 AM

Siehe auch

Weitere Ressourcen

Verarbeiten von Zeichenfolgen

Formatierung von Typen

Konvertieren von Typen