Ich erstelle oft SimpleDateFormat mit einem Muster wie HH:mm:ss
oder yyyy-MM-dd
, um Daten unabhängig von der Sprache auszugeben. Da es auch einen Konstruktor gibt, der einen zusätzlichen locale-Parameter annimmt, frage ich mich, ob es Fälle gibt, in denen ein solches Format abhängig vom Gebietsschema sein kann oder wenn ich immer Locale.ENGLISH oder Locale.GERMANY angeben sollte. Nehmen wir an, dass die Zeitzone explizit eingestellt ist.
Sie haben nur die statische Methode getAvailableLocales
für Locale gefunden, und es stellt sich heraus, dass alle Felder eines Kalenders abhängig vom Gebietsschema sein können:
Auf meinem System (in Deutschland läuft eine englische Version von ubuntu) gibt dies folgende Liste aus, lassen Sie hoffen, dass der Unicode-Charakter intakt durchkommt:
%Vor%Also Japan und Thailand verwenden eine andere Epoche, basieren aber ansonsten auf dem gregorianischen Kalender , was erklärt, warum Monat und Tag die sind gleich.
Andere Gebietsschemata verwenden auch andere Skripte zum Schreiben von Zahlen, zum Beispiel Hindi , die in Indien gesprochen werden, und eine Variante von Thai in Thailand.
Um die Frage zu beantworten, sollte das Gebietsschema immer mit einem bekannten Wert angegeben werden, wenn ein länderunabhängiger String benötigt wird.
Bearbeiten: Java 1.6 hat eine Konstante hinzugefügt Locale.ROOT , um ein länder- / länderneutrales Gebietsschema anzugeben. Dies würde der Angabe des englischen Gebietsschemas für die Ausgabe an einem Computer vorgezogen.
Das Stamm-Gebietsschema ist das Gebietsschema, dessen Sprache, Land und Variante leere ("") Zeichenfolgen sind. Dies wird als das Basisgebietsschema aller Gebietsschemas angesehen und wird als länder- / länderneutrales Gebietsschema für die ländergeschützten Vorgänge verwendet.
Ja, SimpleDateFormat
ist absolut ortsabhängig. Bestimmte Felder wie Stunden und Minuten sind Gebietsschema-unabhängig.
SimpleDateFormat
unterstützt auch lokalisierte Datums- und Zeitmuster -Strings. In diesen Zeichenfolgen können die oben beschriebenen Musterbuchstaben durch andere, Gebietsschema-abhängige Musterbuchstaben ersetzt werden.SimpleDateFormat
befasst sich nicht mit der Lokalisierung von anderem Text als den Musterbuchstaben; Das hängt vom Client der Klasse ab.
Oder Sie können das lokalisierungsfreundliche DateFormat#getDateInstance()
Factory-Methode statt, seit:
public SimpleDateFormat(String pattern, Locale locale)
Konstruiert ein
SimpleDateFormat
mit dem angegebenen Muster und den Standard-Datumsformatsymbolen für das angegebene Gebietsschema. Hinweis: Dieser Konstruktor unterstützt möglicherweise nicht alle Ländereinstellungen. Verwenden Sie für eine vollständige Abdeckung die Factory-Methoden in der KlasseDateFormat
.