Formatieren von Datum und Uhrzeit für eine bestimmte Kultur

Die DateTime-Struktur stellt Methoden bereit (z. B. DateTime.ToString und DateTime.Parse), mit denen kulturabhängige Operationen für eine DateTime ausgeführt werden können. Verwenden Sie die DateTimeFormatInfo-Klasse, um eine DateTime basierend auf der Kultur zu formatieren. DateTimeFormatInfo definiert, wie DateTime-Werte in Abhängigkeit von der Kultur formatiert und angezeigt werden. Bei Verwendung des ShortDatePattern wird beispielsweise das Datum 1. Februar 2001 für die Kultur "en-US" als 2/1/2001 und für die Kultur "en-GB" als 01/02/2001 angezeigt.

Für eine bestimmte Kultur oder die nicht variante Kultur kann eine Instanz von DateTimeFormatInfo erstellt werden, nicht aber für eine neutrale Kultur. Eine neutrale Kultur stellt nicht genügend Informationen zur Verfügung, um das richtige Datumsformat anzuzeigen. Wenn Sie versuchen, eine Instanz von DateTimeFormatInfo mithilfe einer neutralen Kultur zu erstellen, wird eine Ausnahme ausgelöst. Weitere Informationen und Beispiele zur Verwendung der DateTime-Formatierung finden Sie unter Formatzeichenfolgen für Datum und Uhrzeit.

Das folgende Codebeispiel zeigt das aktuelle Datum mithilfe des DateTimeFormatInfo.ShortDatePattern an, wenn CurrentThread.CurrentCulture auf "en-US" für Englisch (USA) und dann auf "de-DE" für Deutsch (Deutschland) festgelegt wird.

Imports System
Imports System.Globalization
Imports System.Threading

Public Class FormatDate
   
   Public Shared Sub Main()
      Dim dt As DateTime = DateTime.Now
      ' Sets the CurrentCulture property to U.S. English.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Displays dt, formatted using the ShortDatePattern
      ' and the CurrentThread.CurrentCulture.
      Console.WriteLine(dt.ToString("d"))
      
      ' Creates a CultureInfo for German in Germany.
      Dim ci As New CultureInfo("de-DE")
      ' Displays dt, formatted using the ShortDatePattern
      ' and the CultureInfo.
      Console.WriteLine(dt.ToString("d", ci))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class FormatDate
{
   public static void Main()
   {
      DateTime dt = DateTime.Now;
      // Sets the CurrentCulture property to U.S. English.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Displays dt, formatted using the ShortDatePattern
      // and the CurrentThread.CurrentCulture.
      Console.WriteLine(dt.ToString("d"));
      
      // Creates a CultureInfo for German in Germany.
      CultureInfo ci = new CultureInfo("de-DE");
      // Displays dt, formatted using the ShortDatePattern
      // and the CultureInfo.
      Console.WriteLine(dt.ToString("d", ci));
   }
}

Wenn Sie diesen Code am 9. Juli 2001 ausführen, erscheint folgende Ausgabe:

7/9/2001
09.07.2001

Arbeiten mit Zeitzonen

Methoden und Eigenschaften der DateTime-Struktur verwenden immer die lokale Zeitzone für Berechnungen und Vergleiche. Dies sollten Sie beachten, wenn Sie die DateTime.Parse-Methode und die DateTime.ParseExact-Methode verwenden. Diese Methoden stellen Überladungen bereit, die die Konvertierung einer Zeichenfolgendarstellung eines Datums und einer Uhrzeit in einen DateTime-Typ ermöglichen. Sie können auch einen DateTime-Typ für eine bestimmte Kultur formatieren. Wenn Sie in der Zeichenfolge, die Sie an diese Methoden übergeben, keine Zeitzone festlegen, geben die Methoden das analysierte Datum und die analysierte Uhrzeit ohne eine Zeitzonenanpassung zurück. Datum und Uhrzeit basieren auf der Zeitzoneneinstellung des Systems. Wenn Sie einen Offsetwert für die Zeitzone festlegen, analysieren diese Methoden die Datum/Uhrzeit-Zeichenfolge und konvertieren sie zunächst in die koordinierte Weltzeit (Coordinated Universal Time, UTC; früher bekannt als Greenwich Mean Time (GMT)) und anschließend in die Zeit des lokalen Systems.

Verwenden Sie die DateTime.ToUniversalTime-Methode, um einen lokalen DateTime-Typ in das entsprechende UTC-Äquivalent zu konvertieren. Um eine Datum/Zeit-Zeichenfolge zu analysieren und dann in eine UTC-DateTime zu konvertieren, verwenden Sie den AdjustToUniversal-Wert der DateTimeStyles-Enumeration mit der DateTime.Parse-Methode oder der DateTime.ParseExact-Methode. Diese DateTime-Änderungen werden im nachstehenden Codebeispiel demonstriert. In diesem Beispiel wird eine DateTime für die lokale Zeit erstellt und dann in DateTime gemäß UTC konvertiert. Beide Typen werden dann in Zeichenfolgen umgewandelt und auf der Konsole ausgegeben. Beachten Sie, dass sich die Zeichenfolgen bezüglich des UTC-Offsets zwischen der lokalen Zeitzone und der koordinierten Weltzeit (UTC) unterscheiden. Weitere Informationen zum UTC-Offset für verschiedene Zeitzonen finden Sie unter TimeZone.GetUtcOffset-Methode. Diese Zeichenfolgen werden mithilfe der DateTime.ParseExact-Methode in DateTime-Typen zurückkonvertiert. Zum Erfassen der in utcdt gespeicherten Zeitzoneninformation muss der AdjustToUniversal-Wert als Parameter für die DateTime.ParseExact-Methode angegeben werden.

Imports System
Imports System.Globalization
Imports System.Threading

Public Class TimeZoneSample
   Public Shared Sub Main()
      Dim en As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = en

      ' Creates a DateTime for the local time.
      Dim dt As New DateTime(2001, 7, 13, 4, 0, 0)

      ' Converts the local DateTime to the UTC time.
      Dim utcdt As DateTime = dt.ToUniversalTime()

      ' Defines a custom string format to display the DateTime.
      ' zzz specifies the full time zone offset.
      Dim format As [String] = "MM/dd/yyyy hh:mm:sszzz"

      ' Converts the local time to a string
      ' using the custom format string and display.
      Dim str As [String] = dt.ToString(format)
      Console.WriteLine(str)

      ' Converts the UTC time to a string
      ' using the custom format string and display.
      Dim utcstr As [String] = utcdt.ToString(format)
      Console.WriteLine(utcstr)

      ' Converts the string back to a local DateTime and displays it.
      Dim parsedBack As DateTime = DateTime.ParseExact(str, format, 
            en.DateTimeFormat)
      Console.WriteLine(parsedBack)

      ' Converts the string back to a UTC DateTime and displays it.
      ' If you do not use the DateTime.ParseExact method that takes
      ' a DateTimeStyles.AdjustToUniversal value, the parsed DateTime
      ' will not include the time zone information. 
      Dim parsedBackUTC As DateTime = DateTime.ParseExact(str, format, _
            en.DateTimeFormat, DateTimeStyles.AdjustToUniversal)
      Console.WriteLine(parsedBackUTC)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TimeZoneSample
{
   public static void Main()
   {
      CultureInfo en = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentCulture = en;

      // Creates a DateTime for the local time.
      DateTime dt = new DateTime(2001, 7, 13, 4, 0, 0);

      // Converts the local DateTime to the UTC time.
      DateTime utcdt = dt.ToUniversalTime();

      // Defines a custom string format to display the DateTime value.
      // zzzz specifies the full time zone offset.
      String format = "MM/dd/yyyy hh:mm:sszzz";

      // Converts the local DateTime to a string 
      // using the custom format string and display.
      String str = dt.ToString(format);
      Console.WriteLine(str);

      // Converts the UTC DateTime to a string 
      // using the custom format string and display.
      String utcstr = utcdt.ToString(format);
      Console.WriteLine(utcstr);

      // Converts the string back to a local DateTime and displays it.
      DateTime parsedBack =
            DateTime.ParseExact(str,format,en.DateTimeFormat);
      Console.WriteLine(parsedBack);

      // Converts the string back to a UTC DateTime and displays it.
      // If you do not use the DateTime.ParseExact method that takes
      // a DateTimeStyles.AdjustToUniversal value, the parsed DateTime
      // object will not include the time zone information.
      DateTime parsedBackUTC = DateTime.ParseExact(str,format, _
            en.DateTimeFormat, DateTimeStyles.AdjustToUniversal);
      Console.WriteLine(parsedBackUTC);
   }
}

Dieser Code erzeugt die folgende Ausgabe:

07/13/2001 04:00:00-07:00
07/13/2001 11:00:00-07:00
7/13/2001 4:00:00 AM
7/13/2001 11:00:00 AM

Arbeiten mit DateTime-Membern

Wenn Sie von der DateTime-Struktur bereitgestellte Methoden verwenden, müssen Sie beachten, dass die Member, z. B. die DateTime.Day-Methode, die DateTime.Month-Methode, die DateTime.Year-Methode und die DateTime.AddDays-Methode, auf dem gregorianischen Kalender beruhen. Auch wenn Sie den aktuellen Kalender im Anwendungscode oder Datums- und Zeiteinstellungen über das Dialogfeld Ländereinstellungen in der Systemsteuerung ändern, wird der gregorianische Kalender weiterhin für die Berechnungen in diesen Methoden verwendet. Diese Funktionalität stellt sicher, dass die von diesen Methoden ausgeführten Rechnungen nicht von Benutzereinstellungen beeinflusst werden. Wenn Sie kulturabhängige Datums- und Uhrzeitoperationen auf der Basis des aktuellen Kalenders durchführen möchten, müssen Sie die DateTimeFormatInfo.Calendar-Eigenschaft verwenden, um Methoden aufzurufen, die von der Calendar-Klasse bereitgestellt werden, z. B. Calendar.GetDayOfMonth, Calendar.GetMonth, Calendar.GetYear und Calendar.AddDays. Ein Beispiel für die verschiedenen Werte, die von den DateTime-Membern und den Calendar-Klassenmembern zurückgegeben werden, finden Sie unter Verwenden von Kalendern für bestimmte Kulturen.

Beachten Sie bei der Arbeit mit der DateTime-Struktur, dass DateTime ein Werttyp und unveränderlich ist. Daher geben Operationen wie DateTime.AddDays einen neuen DateTime-Wert zurück, anstatt den vorhandenen Wert zu erhöhen. Das folgende Beispiel zeigt, wie ein DateTime-Wert mithilfe der Anweisung dt = dt.AddDays(1) um einen Tag erhöht wird.

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class TestClass
   
   Public Shared Sub Main()
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      
      Dim dt As DateTime = DateTime.Now
      Console.WriteLine(ControlChars.Newline + " Today is {0}", _
         DateTime.Now.ToString("d"))
      
      ' Increments dt by one day.
      dt = dt.AddDays(1)
      Console.WriteLine(ControlChars.Newline + " Tomorrow is {0}", _
         dt.ToString("d"))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TestClass
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

      DateTime dt = DateTime.Now;
      Console.WriteLine("Today is {0}", DateTime.Now.ToString("d"));

      // Increments dt by one day.
      dt = dt.AddDays(1);
      Console.WriteLine("Tomorrow is {0}", dt.ToString("d"));

   }
}

Wenn Sie diesen Code am 3. August 2001 ausführen, wird Folgendes ausgegeben:

Today is 8/3/2001
Tomorrow is 8/4/2001

Siehe auch

Referenz

DateTime

Konzepte

Formatzeichenfolgen für Datum und Uhrzeit

Weitere Ressourcen

Codierung und Lokalisierung