C'è stata una significativa (! Ritroso-compatibile) cambiamento nel modo in cui i nomi dei mesi sono localizzati in Java 7 e Java 8.
questo si riferisce per il nuovo java.time API (Tutorial) introdotta da Java 8. l'API (ragionevolmente) distingue due forme diverse di un nome del mese, come definito da java.time.format.TextStyle
enum:
- Standalone, che rappresenta il mo nesimo nome così com'è. Corrisponde al "nominativo" in molte lingue.
- Standard, che viene in genere utilizzato all'interno di rappresentazioni di date complete. Questo corrisponde al "genitivo".
La variante di default per il formattatore di date è "standard", che sembra anche ragionevole, in quanto i formattatori vengono in genere utilizzati per produrre date complete. Sfortunatamente, questo ha portato a un cambiamento nel comportamento (almeno per alcune lingue) tra Java 7 (che ha usato per produrre nomi autonomi) e Java 8 (che produce un nome "standard").
È possibile richiedere esplicitamente il modulo standalone/nominativo utilizzando la suddetta enumerazione TextStyle
. Sfortunatamente, questo rende il tuo codice dipendente da Java 8 o versioni successive.
demo rapida:
import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;
for (TextStyle ts : TextStyle.values()) {
System.out.print(ts + ": ");
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.ENGLISH) + "/"); // English
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("cs")) + "/"); // Czech
System.out.print(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("ru")) + "/"); // Russian
System.out.println(Month.OCTOBER.getDisplayName(ts, Locale.forLanguageTag("pl"))); // Polish
}
che stampa:
FULL: October/října/октября/października
FULL_STANDALONE: 10/říjen/Октябрь/październik
SHORT: Oct/Říj/окт/paź
SHORT_STANDALONE: 10/X/Окт./paź
NARROW: O/ř/О/p
NARROW_STANDALONE: 10/ř/О/p
non so di un modo semplice per ottenere la forma autonoma che avrebbe lavorato sia sotto Java 7 e Java 8. Al almeno non in Java puro - ovviamente, ci sono alcuni modi complicati e più fragili, come cercare di rilevare la versione di Java o l'utilizzo di una libreria di terze parti.
Gran parte della funzionalità java.time è back-porting su Java 6 e 7 in [* ThreeTen-Backport *] (http://www.threeten.org/threetenbp/). Ulteriore adattamento per Android nel progetto [* ThreeTenABP *] (https://github.com/JakeWharton/ThreeTenABP). –