Format-Definitionen für Datum und Uhrzeit
Bei der Ausgabe von Spalten vom Datentyp dateTime kann entweder ein
benutzerdefiniertes Formatmuster oder ein
Formatbezeichner verwendet werden. Benutzerdefinierte Formatmuster bestehen aus einer Reihung von
vordefinierten
Formatzeichen, getrennt durch Leerzeichen oder beliebigen anderen Symbolen.
Formatbezeichner bestehen zunächst nur aus Kombinationen von Kurz- und Langbezeichnungen.
Jede Kultur ordnet jedem Formatbezeichner ein für diese Kultur typisches vordefiniertes Formatmuster zu, welches ebenso aufgebaut
ist wie ein benutzerdefiniertes Formatmuster. Damit produziert die Verwendung eines Formatbezeichners bei unterschiedlichen Ausgabekulturen unterschiedliche Darstellungen.
Das Formatmuster wird als Attributwert des
sd:datetime-format-Attributes
festgelegt.
Innerhalb von anderen Umgebungen (etwa Excel oder Access) wird die zu verwendende Ausgabekultur anhand der Daten der
Systemsteuerung ermittelt. Innerhalb von server-daten werden definierte Muster relativ zur aktuellen Spracheinstellung des
Clientbrowsers interpretiert. Alternativ kann mittels des
sd:culture-Attributes eine Ausgabe-Kultur fixiert
werden, in diesem Fall erhalten alle Clientbrowser dieselbe Ausgabe. Intern werden diese Ausdrücke über
<Datumsvariable>.ToString(<Formatmuster>, <CultureInfo>) umgeleitet. <CultureInfo> ist eine
spezifische Kultur, deren Wert sich entweder aus der Spracheinstellung des Clients oder aus dem Wert des
sd:culture-Attributes ergibt.
Die hiesigen Tabellen sind im wesentlichen eine Übersetzung der Informationen zur
DateTimeFormatInfo - Class.
Vordefinierte Formatzeichen für benutzerdefinierte Datums- und Zeitformat-Muster
| Formatzeichen | Beschreibung |
|---|
| d | Tag des Monats, bei einstelligen Tagen keine führende Null |
| dd | Tag des Monats mit führender Null bei einstelligen Tagesangaben |
| ddd | Abgekürzter Name des Wochentags (Mo/Di, Mon/Tue) |
| dddd | Vollständiger Name des Wochentags (Montag/Dienstag, Monday/Tuesday) |
| M | Monat als Zahl ohne führende Null bei einstelligen Angaben |
| MM | Monat als Zahl mit führender Null |
| MMM | Abgekürzter Monatsname (Okt/Nov/Dez, Oct/Nov/Dec) |
| MMMM | Vollständiger Monatsname (Oktober/November/Dezember, October/November/December) |
| y | Jahreszahl ohne Jahrhundert und ohne führende Null bei einstelligen Angaben |
| yy | Jahreszahl ohne Jahrhundert mit führender Null |
| yyyy | Vierstellige Jahreszahl |
| h | Stunde in 12-Stunden-Schreibweise ohne führende Null |
| hh | Stunde in 12-Stunden-Schreibweise mit führender Null |
| H | Stunde in 24-Stunden-Schreibweise ohne führende Null |
| HH | Stunde in 24-Stunden-Schreibweise mit führender Null |
| m | Minute ohne führende Null |
| mm | Minute mit führender Null |
| s | Sekunde ohne führende Null |
| ss | Sekunde mit führender Null |
| f | Sekundenbruchteil, Genauigkeit auf eine Stelle ohne Rundung |
| ff - fffffff | analog, der Rest wird jeweils abgeschnitten |
| t | Das erste Zeichen des AM/PM-Kennzeichner (A oder P bzw. kulturabhängig) |
| tt | Der AM/PM-Kennzeichner (kulturabhängig) |
| z | Zeitzonenoffset ("+" oder "-", gefolgt von der Stundenangabe) ohne führende Null |
| zz | Zeitzonenoffset ("+" oder "-", gefolgt von der Stundenangabe) mit führender Null |
| zzz | Vollständiger Zeitzonenoffset ("+" oder "-", gefolgt von der Stunden- und Minutenangabe - bsp. "-08:00"). Einstellige Stunden- und Minutenangaben weisen jeweils eine führende 0 auf. |
| / | Das kulturabhängige Standardtrennzeichen für Datumsangaben |
| : | Das kulturabhängige Standardtrennzeichen für Zeitangaben |
| %x | x bezeichne ein 1-Zeichen-Formatmuster aus der aktuellen Tabelle. Falls nur dieses ausgegeben werden
soll, wird '%' davorgesetzt, um es vom Standardmuster zu unterscheiden. Bei mehr als einem Zeichen entfällt '%'. |
| \x | Dies fügt x als Literalzeichen ein, ohne es als Formatzeichen zu interpretieren |
Die vordefinierten Muster können, durch Leerzeichen oder beliebige Trennzeichen abgegrenzt, verwendet werden. Falls
'/' oder ':' aus der obigen Tabelle verwendet werden, ersetzt die spätere Interpretation diese Zeichen durch jene von der
Ausgabekultur festgelegten Datums- und Zeittrenner.
Das Muster
dd.MM.yyyy erzeugt die Ausgabe
15.10.2005, der Punkt wird absolut interpretiert.
Das Muster
dd/MM/yyyy erzeugt für deutsche Leser ('.' als Datumstrenner) dieselbe Ausgabe, für Leser mit 'en-US'
('/' als Datumstrenner) die Ausgabe
15/10/2005.
Standardformatbezeichner
Es ist zu beachten, daß die Definitionen dieser Tabelle nur die Kombination aus den beiden ersten Spalten umfassen.
Jede spezifische Kultur legt mit einem eigenen Formatmuster fest, wie es die Kürzel aus der ersten Spalte interpretiert.
Als mögliche Beispiele sind deutsche und englische (en-US) Ausgaben für das jeweilige Muster angegeben.
| Formatbezeichner | Beschreibung | de-DE | en-US |
|---|
| d | ShortDatePattern | 24.10.2005 | 10/24/2005 |
| D | LongDatePattern | Montag, 24. Oktober 2005 | Monday, October 24, 2005 |
| f | Vollständiges Datum und Uhrzeit (langes Datumsformat und 24-Stunden-Zeitformat) | Montag, 24. Oktober 2005 13:15 | Monday, October 24, 2005 1:15 PM |
| F | FullDateTimePattern (langes Datumsformat und langes Zeitformat) | Montag, 24. Oktober 2005 13:15:30 | Monday, October 24, 2005 1:15:30 PM |
| g | Allgemein (kurzes Datumsformat und 24-Stunden-Zeitformat) | 24.10.2005 13:15 | 10/24/2005 1:15 PM |
| G | Allgemein (kurzes Datumsformat und langes Zeitformat) | 24.10.2005 13:15:30 | 10/24/2005 1:15:30 PM |
| m, M | MonthDayPattern | 24 Oktober | October 24 |
| r, R | RFC1123Pattern | Mon, 24 Oct 2005 13:15:30 GMT | Mon, 24 Oct 2005 13:15:30 GMT |
| s | SortableDateTimePattern auf der Grundlage von ISO 8601 unter Verwendung der Ortszeit | 2005-10-24T13:15:30 | 2005-10-24T13:15:30 |
| t | ShortTimePattern | 13:15 | 1:15 PM |
| T | LongTimePattern | 13:15:30 | 1:15:30 PM |
| u | UniversalSortableDateTimePattern unter Verwendung des Formats zur Anzeige der koordinierten Weltzeit | 2005-10-24 13:15:30Z | 2005-10-24 13:15:30Z |
| U | Vollständiges Datum und Uhrzeit (langes Datumsformat und langes Zeitformat) unter Verwendung der koordinierten Weltzeit | Montag, 24. Oktober 2005 11:15:30 | Monday, October 24, 2005 11:15:30 AM |
| y, Y | YearMonthPattern | Oktober 2005 | October, 2005 |
Alle Standardmuster sind mit einem Zeichen darstellbar. Es können nicht mehrere Standardmuster in einer Ausgabe gemeinsam
verwendet werden.
Beachten Sie allerdings, daß diese Ausgaben weiterhin von der Spracheinstellung des Clientbrowsers abhängig sind und daß
nicht nur die Tages- und Monatsbezeichnungen, sondern auch Datums- und Zeittrenner kulturell verschiedenartig sind.
So wird, wie im oberen Beispiel des 'ShortDatePattern' 'd' sichtbar, für
de-DE der Punkt, für
en-US der
Slash als Trenner für die Datumsbestandteile verwendet. Ein Attributwert
MM/dd/yyyy führt deshalb bei
der Browsereinstellung 'de-DE' zur Ausgabe '10.26.2005', bei der Browsereinstellung 'en-US' zu '10/26/2005'. In solchen
Fällen kann es besser sein, das ShortDatePattern zu nutzen, um deutschen Lesern '26.10.2005', amerikanischen Lesern dagegen
'10/26/2005' auszugeben. Soll in jedem Fall '/' als Datumstrenner verwendet werden, so kann dieser mittels '\' maskiert werden.
Der Attributwert
MM\/dd\/yyyy für das
sd:datetime-format-Attribut
erzeugt für alle Leser eine Ausgabe im US-amerikanischen Format. Dies ändert allerdings nichts an den Tages- und Monatsnamen, die weiterhin lokalisiert
werden. Deshalb kann mit dem
sd:culture-Attribut die Kultur für die Darstellung explizit festgelegt
und die Browsereinstellung hierdurch überschrieben werden. Dies ermöglicht es, bsp. immer deutsche oder englische Bezeichnungen
auszugeben.
Werden solche Muster in Eingabemasken verwendet, um dort das Format festzulegen, so muß auch die Eingabe diesem Format entsprechen.
Ein Format 'dd.MM.yyyy' erfordert die Eingabe einer führenden Null, ein Ausdruck '1.10.2000' wird zurückgewiesen.
Für Eingabefelder sind die verkürzten Darstellungen 'd/M/yyyy' ohne Texte und ohne innere Leerzeichen die beste Wahl.
Beachten Sie, daß die Darstellung 'd.M.yyyy' absolut, das Format 'd/M/yyyy' dagegen relativ interpretiert wird - '/' ist
der Platzhalter für das Datumstrennzeichen. Alternativ können für Eingabefelder Standardmuster (etwa 'd') genutzt werden.
Diese werden intern nicht mit <ParseExact> (wie die benutzerdefinierten Formate), sondern schwach mit <Parse>
geprüft. Dies schreibt nur die Reihenfolge zwischen Tagen, Monaten und Jahren gemäß der aktuellen Kultur fest, erlaubt jedoch
verschiedene Trennzeichen sowie den Verzicht auf führende Nullen. Damit sind für 'de-DE' die Darstellungen '25.2.2000',
'25-02-2000' und '25/02/2000' ebenso gültig wie die en-US-Versionen '2.25.2000', '02-25-2000' und '02/25/2000'.
Werden innerhalb von Sql-Abfragen Textkonstanten mit Datums- oder Zeitangaben benötigt, so ist zu beachten, daß der
Sql-Server intern ausschließlich en-US - Formate verarbeitet. Hierbei handelt es sich nicht um eine Design-Schwäche
des Sql-Servers, sondern um eine bewußt einschränkende Regel innerhalb des Projekts server-daten. Dieses entscheidet alle
Sprachalternativen über die Benutzerschicht, so daß jede Kommunikation mit dem Sql-Server mit der Spracheinstellung en-US
geführt wird. Datumskonstanten innerhalb von Abfragen können damit in der Form 'MM.dd.yyyy' oder 'yyyy.MM.dd' mit dem Punkt,
'-' oder '/' als Trenner notiert werden, so daß '10/25/2005', '10.25.2005', '2005-10-25' und '2005/10/25' erkannt werden.
Schließlich gelingt auch die direkte Notation 'yyyyMMdd', etwa '20051025'.
© 2003-2009 Jürgen Auer, Berlin.