seguito il codice non viene stampata "CE" o "Era corrente":Come visualizzare era comune ("CE") in Java-8?
System.out.println(IsoEra.CE.getDisplayName(TextStyle.SHORT, Locale.UK)); // output: AD
System.out.println(IsoEra.CE.getDisplayName(TextStyle.FULL, Locale.UK)); // output: Anno Domini
Naturalmente, IsoEra.CE.name()
aiuta ma non se è richiesto il nome visualizzato completo come "era comune" o "epoca attuale". Considero questo un po 'strano perché il javadoc di IsoEra
menziona esplicitamente il termine "Era attuale" nella sua descrizione di classe. Non funziona nemmeno per le impostazioni locali di root. Il caso d'uso qui è di servire clienti con background non religioso.
Questo non aiuta, troppo:
LocalDate date = LocalDate.now();
String year = date.format(DateTimeFormatter.ofPattern("G yyyy", Locale.UK)); // AD 2015
System.out.println(year);
L'unico modo che ho trovato è stato:
TextStyle style = ...;
Map<Long,String> eras = new HashMap<>();
long bce = (long) IsoEra.BCE.getValue(); // 0L
long ce = (long) IsoEra.CE.getValue(); // 1L
if (style == TextStyle.FULL) {
eras.put(bce, "Before current era");
eras.put(ce, "Current era");
} else {
eras.put(bce, "BCE");
eras.put(ce, "CE");
}
DateTimeFormatter dtf =
new DateTimeFormatterBuilder()
.appendText(ChronoField.ERA, eras)
.appendPattern(" yyyy").toFormatter();
System.out.println(LocalDate.now().format(dtf)); // CE 2015
C'è un modo migliore o più breve?
Utilizzare una locale che utilizza la variante "politically correct", perché AD e anno domini ** sono ** i testi corretti per CE nella maggior parte delle versioni locali occidentali. –
@MarkRotteveel Quale locale suggerisci? Con una parte variante extra e l'installazione di risorse associate tramite ServiceLoader? –
Se solo si potesse trovare un locale! Anche la presunta lingua e country neutral Locale.ROOT lancia "AD" come se fosse fuori moda (che applaudirei). – sheltem