So wird’s gemacht: Verwenden von Mustern zum Formatieren von Datums- und Uhrzeitwerten (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation ]

Verwenden Sie die Windows.Globalization.DateTimeFormatting-API mit benutzerdefinierten Mustern, um Datums- und Uhrzeitangaben im gewünschten Format darzustellen.

Windows.Globalization.DateTimeFormatting bietet mehrere Möglichkeiten, Datums- und Uhrzeitwerte für Sprachen und Regionen auf der ganzen Welt ordnungsgemäß zu formatieren. In den meisten Fällen können Sie Standardformate für Jahr, Monat, Tag usw. verwenden. Oder Sie können mit Standardzeichenfolgenvorlagen wie "longdate" oder "month day" sicherstellen, dass das DateTime-Format für Kultur, Sprache und Region des Benutzers geeignet ist. Manchmal möchten Sie jedoch möglicherweise die Reihenfolge und das Format der Bestandteile der anzuzeigenden DateTime-Zeichenfolge genauer steuern, beispielsweise weil es sich bei Ihrer Zielgruppe um eine bestimmte bekannte Kultur oder Region handelt oder Sie Bestandteile in einem Format anzeigen möchten, das nicht dem Standard entspricht.

Zu diesem Zweck kann eine spezielle Syntax für den Zeichenfolgenvorlagenparameter (ein so genanntes "Muster") verwendet werden. Mit der Mustersyntax können Sie einzelne Bestandteile eines DateTime-Objekts abrufen, z. B. nur den Monatsnamen oder nur den Jahreswert, um sie in jedem benutzerdefinierten Format anzuzeigen, das Sie verwenden möchten.

Wissenswertes

Technologien

Voraussetzungen

Sie müssen beachten, dass Sie beim Verwenden von Mustern ein benutzerdefiniertes Format erstellen, das nicht unbedingt kulturübergreifend gültig ist. Betrachten wir als Beispiel die Vorlage "month day":

var datefmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("month day");

Hierdurch wird ein Formatierer erstellt, der auf dem Sprach- und Regionswert des aktuellen Kontexts basiert. Monat und Tag werden somit immer gemeinsam in einem geeigneten globalen Format dargestellt. Beispiel: "January 1" für English (USA), "1 janvier" für Französisch (Frankreich) und "1月1日" für Japanisch. Der Grund hierfür ist, dass die Vorlage auf einer kulturspezifischen Musterzeichenfolge basiert, auf die über die Mustereigenschaft zugegriffen werden kann:

var monthdaypattern = datefmt.patterns;

Somit ist das Ergebnis je nach Sprache und Region des Formatierers unterschiedlich. Beachten Sie, dass für unterschiedliche Regionen unterschiedliche Bestandteile in unterschiedlicher Reihenfolge und mit oder ohne zusätzliche Zeichen und Leerzeichen verwendet werden können:

En-US: "{month.full} {day.integer}"
Fr-FR: "{day.integer} {month.full}"
Ja-JP: "{month.integer}月{day.integer}日"

Sie können mit Mustern einen benutzerdefinierten DateTimeFormatter erstellen, z. B. diesen auf dem Muster für Englisch (USA) basierenden Formatierer:

var datefmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("{month.full} {day.integer}");

Windows gibt in den geschweiften Klammern {} kulturspezifische Werte für die einzelnen Bestandteile zurück. Bei der Mustersyntax ist die Reihenfolge der Bestandteile allerdings unveränderlich. Sie erhalten also stets genau das, was Sie anfordern, und das ist unter Umständen nicht immer für die Kultur geeignet:

En-US: January 1
Fr-FR: janvier 1 (inappropriate for France; non-standard order)
Ja-JP: 1月1 (inappropriate for Japan; the day symbol is missing)

Darüber hinaus können sich Muster im Lauf der Zeit ändern. Länder und Regionen können Änderungen an ihren Kalendersystemen vornehmen, die die Anpassung einer Formatvorlage zur Folge hat. Windows aktualisiert die Ausgabe der Formatierer, um solchen Änderungen Rechnung zu tragen. Daher sollten Sie zum Formatieren von DateTimes die Mustersyntax nur unter folgenden Bedingungen verwenden:

  • Sie benötigen keine bestimmte Ausgabe für ein Format.
  • Das Format muss keinen bestimmten kulturspezifischen Standard erfüllen.
  • Das Muster soll bewusst für alle Kulturen unveränderlich sein.
  • Sie beabsichtigen, das Muster zu lokalisieren.

Zusammenfassung der Unterschiede zwischen Standard-Zeichenfolgenvorlagen und nicht standardmäßigen Zeichenfolgenvorlagen:

Zeichenfolgenvorlagen, z. B. "month day":

  • Eine abstrahierte Darstellung des DateTime-Formats, die Werte für den Tag und den Monat in einer bestimmten Reihenfolge enthält.
  • Gibt für alle von Windows unterstützten Sprach- und Regionswerte stets ein gültiges Standardformat zurück.
  • Liefert stets eine entsprechend der Kultur formatierte Zeichenfolge für die angegebene Sprache und Region.
  • Nicht alle Kombinationen der Bestandteile sind gültig. Beispielsweise gibt es keine Zeichenfolgenvorlage für "dayofweek day".

Zeichenfolgenmuster, z. B. "{month.full} {day.integer}":

  • Eine Zeichenfolge mit explizit festgelegter Reihenfolge, die den vollständigen Monatsnamen, gefolgt von einem Leerzeichen, auf das der als ganze Zahl dargestellte Tag folgt, angibt (und zwar in dieser Reihenfolge).
  • Entspricht möglicherweise nicht dem gültigen Standardformat für jedes Sprach-Region-Paar.
  • Ist nicht in jedem Fall der Kultur angemessen.
  • Es kann jede Kombination von Bestandteilen in jeder Reihenfolge angegeben werden.

Anweisungen

Angenommen, Sie möchten den aktuellen Monat und den aktuellen Tag zusammen mit der aktuellen Uhrzeit in einen bestimmten Format anzeigen. Sie möchten also z. B., dass Folgendes für US-Benutzer angezeigt wird :

June 25 | 1:38 PM

Die Datumskomponente entspricht der Vorlage "month day", und die Uhrzeitkomponente der Vorlage "hour minute". Sie können also ein benutzerdefiniertes Format erstellen, dass die Muster verknüpft, aus denen sich diese Vorlagen zusammensetzen.

Erstellen Sie zunächst die Formatierer der relevanten Vorlagen für Datum und Uhrzeit und dann die Muster dieser Vorlagen:

// Get formatters for the date part and the time part.
var dtf = Windows.Globalization.DateTimeFormatting;
var mydate = dtf.DateTimeFormatter("month day");
var mytime = dtf.DateTimeFormatter("hour minute");

// Get the patterns from these formatters.
var mydatepattern = mydate.patterns[0];
var mytimepattern = mytime.patterns[0];

Ihr benutzerdefiniertes Format muss als lokalisierbare Ressourcenzeichenfolge gespeichert werden. Beispielsweise lautet die Zeichenfolge für Englisch (USA) "{date} | {time}". Lokalisierer können diese Zeichenfolge wie gewünscht anpassen. Sie können beispielsweise die Reihenfolge der Bestandteile ändern, falls in bestimmten Sprachen oder Regionen die Uhrzeit vor dem Datum stehen soll. Oder Sie können "|" durch ein anderes Trennzeichen ersetzen. Zur Laufzeit werden die Bestandteile "{date}" und "{time}" der Zeichenfolge durch das entsprechende Muster ersetzt:

// Assemble the custom pattern. This string comes from a resource, and should be localizable. 
var mydateplustime = WinJS.Resources.getString("date_plus_time");
mydateplustime = mydateplustime.replace("{date}", mydatepattern);
mydateplustime = mydateplustime.replace("{time}", mytimepattern);

Anschließend können Sie einen neuen Formatierer auf der Grundlage des benutzerdefinierten Musters erstellen:

// Get the custom formatter.
var mydateplustimefmt = new dtf.DateTimeFormatter(mydateplustime);

Verwandte Themen

Beispiel für Datums- und Uhrzeitformatierung

Windows.Globalization.DateTimeFormatting

Windows.Foundation.DateTime