Ich versuche, ein Datum in Java basierend auf dem angegebenen Gebietsschema auf unterschiedliche Weise zu formatieren. Zum Beispiel möchte ich, dass englische Benutzer "1. November 2009" (formatiert mit "MMM d, yyyy") und norwegische Benutzer "1. November 2009" ("d. MMM. JJJJ") sehen.
Der Monatsteil funktioniert einwandfrei, wenn ich das Gebietsschema zum SimpleDateFormat-Konstruktor hinzufüge, aber was ist mit dem Rest?
Ich hatte gehofft, SimpleDateFormat Formatzeichenfolgen mit Gebietsschemas hinzufügen zu können, aber ich kann keine Möglichkeit finden, dies zu tun. Ist es möglich oder muss ich meinen Code das Gebietsschema überprüfen lassen und die entsprechende Formatzeichenfolge hinzufügen?
java
date
locale
simpledateformat
fiskeben
quelle
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 & Java 9. Siehe Tutorial von Oracle .Antworten:
Verwenden Sie DateFormat.getDateInstance (int style, Locale locale), anstatt Ihre eigenen Muster mit zu erstellen
SimpleDateFormat
.quelle
java.util.Date
undSimpleDateFormat
sind jetzt Legacy, ersetzt durch die java.time-Klassen.quelle
Verwenden Sie den Stil + Gebietsschema : DateFormat.getDateInstance (int style, Gebietsschema Gebietsschema)
Überprüfen Sie http://java.sun.com/j2se/1.5.0/docs/api/java/text/DateFormat.html
Führen Sie das folgende Beispiel aus, um die Unterschiede festzustellen:
Ausgabe:
quelle
DateFormat.LONG
undDateFormat.DEFAULT
Stile!java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 & Java 9. Siehe Tutorial von Oracle .tl; dr
Die lästigen Klassen von
java.util.Date
undSimpleDateFormat
sind jetzt Legacy, ersetzt durch die java.time-Klassen.LocalDate
Die
LocalDate
Klasse repräsentiert einen Nur-Datum-Wert ohne Tageszeit und ohne Zeitzone.Eine Zeitzone ist entscheidend für die Bestimmung eines Datums. Für jeden Moment variiert das Datum weltweit je nach Zone. Zum Beispiel ist ein paar Minuten nach Mitternacht in Paris Frankreich ein neuer Tag, während es in Montréal Québec noch „gestern“ ist .
DateTimeFormatter
Verwenden Sie
DateTimeFormatter
diese Option , um Zeichenfolgen zu generieren, die nur den Datums- oder Zeitabschnitt darstellen.Die
DateTimeFormatter
Klasse kann automatisch lokalisieren .Geben Sie zum Lokalisieren Folgendes an:
FormatStyle
um zu bestimmen, wie lang oder abgekürzt die Zeichenfolge sein soll.Locale
(a) die menschliche Sprache für die Übersetzung des Namens des Tages, des Monats und dergleichen zu bestimmen und (b) die kulturellen Normen, die Fragen der Abkürzung, Großschreibung, Zeichensetzung und dergleichen entscheiden.Beispiel:
Wenn Sie in die andere Richtung gehen, können Sie eine lokalisierte Zeichenfolge analysieren.
Beachten Sie, dass das Gebietsschema und die Zeitzone vollständig orthogonale Probleme sind. Sie können einen Montréal-Moment in japanischer Sprache oder einen Auckland New Zealand-Moment in Hindi-Sprache präsentieren lassen.
Ein weiteres Beispiel: Ändern Sie
6 junio 2012
(Spanisch) in2012-06-06
(Standardformat ISO 8601 ). Die java.time-Klassen verwenden standardmäßig ISO 8601-Formate zum Parsen / Generieren von Zeichenfolgen.Formate durchlesen
Hier ist ein Beispielcode zum Durchsuchen der Ergebnisse mehrerer Formate in mehreren Gebietsschemas, die automatisch lokalisiert werden.
An
EnumSet
ist eine Implementierung vonSet
, die sowohl für eine geringe Speichernutzung als auch für eine schnelle Ausführungsgeschwindigkeit beim Sammeln vonEnum
Objekten hochoptimiert ist . SoEnumSet.allOf( FormatStyle.class )
gibt uns eine Sammlung von allen vier derFormatStyle
ENUM - Objekte in einer Schleife. Weitere Informationen finden Sie im Oracle-Lernprogramm zu Aufzählungstypen .Ausgabe.
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie
java.util.Date
,Calendar
, &SimpleDateFormat
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für
java.sql.*
Klassen.Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden
Interval
,YearWeek
,YearQuarter
, und mehr .quelle
Lokalisierung der Datumszeichenfolge:
Basierend auf Redsonics Beitrag:
wird wie 05- 九月 -2013 sein
quelle
Dadurch wird das Datum entsprechend dem aktuellen Gebietsschema des Benutzers angezeigt :
So geben Sie Datum und Uhrzeit zurück:
31. Dezember 1969, 19:00:02 Uhr
Um nur das Datum zurückzugeben, verwenden Sie:
31. Dezember 1969
quelle
Java 8 Style für ein bestimmtes Datum
quelle
quelle
Hoffe das hilft jemandem. Im folgenden Code finden Sie den Code, der die Gebietsschemainstanz akzeptiert und das länderspezifische Datumsformat / -muster zurückgibt.
quelle
Java8
quelle
ofPattern
ein Gebietsschema-Argument verwenden, erhalten Sie den Monatsnamen in der gewünschten Sprache, jedoch nicht in den in der Frage angeforderten Formaten. Die Verwendung von GroßbuchstabenYYYY
führt in Eckfällen zu falschen und sehr überraschenden Ergebnissen. Die Verwendung von Java 8 ist eine gute Idee.