如何在Java-8中显示通用时代(“CE”)?
以下代码不打印“CE”或“当前时代”:
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
当然,如果需要完整的显示名称(如“共同时代”或“当前时代”),则无济于事。我认为这有点奇怪,因为javadoc在其类描述中明确提到了术语“当前时代”。它甚至不适用于根区域设置。这里的用例是为具有非宗教背景的客户提供服务。IsoEra.CE.name()
IsoEra
这也无济于事:
LocalDate date = LocalDate.now();
String year = date.format(DateTimeFormatter.ofPattern("G yyyy", Locale.UK)); // AD 2015
System.out.println(year);
我发现的唯一方法是:
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
有没有更好或更短的方法?