folgender Code wird nicht gedruckt „CE“ oder „Aktuelle Zeit“:Wie kann man in Java-8 eine gemeinsame Ära ("CE") anzeigen?
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
Natürlich IsoEra.CE.name()
hilft aber nicht, wenn die vollen Anzeigenamen wie „common era“ oder „Strom-Ära“ erforderlich ist. Ich halte das für etwas merkwürdig, weil das Javadoc von IsoEra
in seiner Klassenbeschreibung ausdrücklich den Begriff "Current era" erwähnt. Es funktioniert nicht einmal für das Root-Gebietsschema. Der Anwendungsfall ist hier, Kunden mit nicht-religiösem Hintergrund zu bedienen.
Dies hilft nicht, auch:
LocalDate date = LocalDate.now();
String year = date.format(DateTimeFormatter.ofPattern("G yyyy", Locale.UK)); // AD 2015
System.out.println(year);
Der einzige Weg, ich fand, ist:
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
Gibt es einen besseren oder kürzeren Weg?
Verwenden Sie ein Gebietsschema, das die "politisch korrekte" Variante verwendet, da AD und anno domini ** die korrekten Texte für CE in den meisten westlichen Gebietsschemas sind. –
@MarkRotteveel Welchen Ort schlagen Sie vor? Mit einer zusätzlichen Variante und dem Installieren der zugehörigen Ressourcen über ServiceLoader? –
Wenn nur ein Locale gefunden werden könnte! Selbst die angeblich sprach- und länderneutrale Locale.ROOT wirft "AD" auf dich, als würde es aus der Mode kommen (was ich begrüßen würde). – sheltem