DateTimeFormatter 将纪元格式化为 'n.e.'

Era formatted as 'n.e.' by DateTimeFormatter

当我为时代创建格式化程序时:

import java.time.*
import java.time.format.*

var formatter = DateTimeFormatter.ofPattern("G");

然后使用它我得到 n.e. 而不是 AD.

formatter.format(LocalDateTime.now()); //n.e.

为什么时代格式为n.e

我在 ubuntu 仿生上使用 java 11:

openjdk 11 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

您的默认语言环境似乎是 波兰语。我有两个理由认为:

a) 你的名字听起来像波兰语,所以你可能在波兰的计算机上工作。我的猜测对吗?

b) 在波兰语中:时代 AD 确实被格式化为 "n.e."。此缩写代表 "naszej ery"(= 当前时代)。

无论您的语言环境是什么,我都没有发现任何错误。如果您坚持 "AD" 那么请通过将其作为额外参数传递给 DateTimeFormatter-factory 方法来适当地更改语言环境。如果您找不到这样的语言环境,那么您也可以考虑使用构建器方法并使用:

Map<Long, String> map = new HashMap<>();
map.put(0, "BC");
map.put(1, "AD");
DateTimeFormatter dtf = 
    new DateTimeFormatterBuilder().appendText(ChronoField.ERA, map).toFormatter();