Die Darstellung des aktuellen Datums wird vornehmlich durch zwei Faktoren beeinflusst:
- durch die zu verwendende Sprache bzw. Kultur
- durch eine explizite Formatangabe
Mit dem Beitrag vom 17.08.2006 haben wir bereits die Methode String.Format()zur Formatierung von Fließkommazahlen vorgestellt. Die gleiche Methode kann auch der Formatierung von Datumsangaben dienen. Schauen wir uns die Signatur dieser Methode an, erkennt man, dass als erster Parameter ein Objekt erwartet wird, das die Schnittstelle IFormatProvider implementiert:
public static string Format(IFormatProvider provider, string format, params object[] args);
Das .NET-Framework stellt unter dem Namespace System.Globalization zwei Klassen zur Verfügung, die diese Schnittstelle implementieren, die im Kontext der Formatierung von Datumsangaben von besonderer Bedeutung sind:
- CultureInfo
- DateTimeFormatInfo
Während die erste Klasse CultureInfo Informationen über eine bestimmte Kultur bereitstellt, definiert die zweite Klasse DateTimeFormatInfo das Format der Anzeige durch die Angabe eines Standardformatbezeichners. Die wichtigsten dieser Standardformatbezeichner wollen wir im Folgenden etwas genauer betrachten. Wir nutzen dazu eine andere überladene Methode String.Format, die als Parameter lediglich den Formatbezeichner und das Datum erwartet. Die in den Systemeinstellungen definierte Kultur wird dabei für die landesspezifische Formatierung genutzt.
- Console.WriteLine(String.Format("{0:d}", DateTime.Now));
Ausgabe: kurzes Datum: 04.09.2006
- Console.WriteLine(String.Format("{0:D}", DateTime.Now));
Ausgabe: langes Datum: Montag, 4. September 2006
3. Console.WriteLine(String.Format("{0:f}", DateTime.Now));
Ausgabe: langes Datum inkl. Zeitangabe: Montag, 4. September 2006 09:39
4. Console.WriteLine(String.Format("{0:m}", DateTime.Now));
Ausgabe: Tag und Monat: 04 September
- Console.WriteLine(String.Format("{0:T}", DateTime.Now));
Ausgabe: Zeitangabe inkl. Sekunden: 09:40:44
Weitere Standardbezeichner sind z.B. „t“ (Zeitangabe ohne Sekunden), „y“ (Monat und Jahr) oder „g“ (Datum inkl. Zeitangabe).
Um die Formatierung länderspezifisch zu gestalten, muss der Methode String.Format nun ein CultureInfo-Objekt übergeben werden, das die entsprechende Kultur beschreibt. Das folgende Listing definiert ein amerikanisches CultureInfo-Objekt und gibt das aktuelle Datum in einem für den US-amerikanischen Raum typischen Format aus:
CultureInfo culture = new CultureInfo("en-US");
Console.WriteLine(String.Format(culture, "{0:d}", DateTime.Now));
Die Ausgabe dieses Zweizeilers ist: 9/4/2006.
Neben diesen Standardformatbezeichnern lassen sich auch analog zur Formatierung von Fließkommazahlen eigene Formatierungsanweisungen definieren.
Hinweis: eine detaillierte Übersicht über die Standardformatbezeichner zur Formatierung von Datumsangaben findet es sich auf den MSDN-Seiten unter http://msdn2.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx. Eine Übersicht über die Länderkennungen findet sich auf den MSDN-Seiten unter http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx.