tl; dr
LocalDate.now().format(
DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM )
.withLocale( new Locale( "no" , "NO" ) )
)
Die lästigen Klassen von java.util.Date
und SimpleDateFormat
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 .
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
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:
Locale l = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( l );
String output = ld.format( f );
Wenn Sie in die andere Richtung gehen, können Sie eine lokalisierte Zeichenfolge analysieren.
LocalDate ld = LocalDate.parse( input , f );
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) in 2012-06-06
(Standardformat ISO 8601 ). Die java.time-Klassen verwenden standardmäßig ISO 8601-Formate zum Parsen / Generieren von Zeichenfolgen.
String input = "6 junio 2012";
Locale l = new Locale ( "es" , "ES" );
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "d MMMM uuuu" , l );
LocalDate ld = LocalDate.parse ( input , f );
String output = ld.toString(); // 2012-06-06.
Formate durchlesen
Hier ist ein Beispielcode zum Durchsuchen der Ergebnisse mehrerer Formate in mehreren Gebietsschemas, die automatisch lokalisiert werden.
An EnumSet
ist eine Implementierung von Set
, die sowohl für eine geringe Speichernutzung als auch für eine schnelle Ausführungsgeschwindigkeit beim Sammeln von Enum
Objekten hochoptimiert ist . So EnumSet.allOf( FormatStyle.class )
gibt uns eine Sammlung von allen vier der FormatStyle
ENUM - Objekte in einer Schleife. Weitere Informationen finden Sie im Oracle-Lernprogramm zu Aufzählungstypen .
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 );
List < Locale > locales = new ArrayList <>( 3 );
locales.add( Locale.CANADA_FRENCH );
locales.add( new Locale( "no" , "NO" ) );
locales.add( Locale.US );
// Or use all locales (almost 800 of them, for about 120K text results).
// Locale[] locales = Locale.getAvailableLocales(); // All known locales. Almost 800 of them.
for ( Locale locale : locales )
{
System.out.println( "------| LOCALE: " + locale + " — " + locale.getDisplayName() + " |----------------------------------" + System.lineSeparator() );
for ( FormatStyle style : EnumSet.allOf( FormatStyle.class ) )
{
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( style ).withLocale( locale );
String output = ld.format( f );
System.out.println( output );
}
System.out.println( "" );
}
System.out.println( "« fin »" + System.lineSeparator() );
Ausgabe.
------| LOCALE: fr_CA — French (Canada) |----------------------------------
mardi 23 janvier 2018
23 janvier 2018
23 janv. 2018
18-01-23
------| LOCALE: no_NO — Norwegian (Norway) |----------------------------------
tirsdag 23. januar 2018
23. januar 2018
23. jan. 2018
23.01.2018
------| LOCALE: en_US — English (United States) |----------------------------------
Tuesday, January 23, 2018
January 23, 2018
Jan 23, 2018
1/23/18
« fin »
Ü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 .
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 .