为什么Java的java.time.format.DateTimeFormatter #format(LocalDateTime)会增加一年?

时间:2015-12-30 01:36:13

标签: java time localization utc

这是代码:

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1451438792953L), ZoneId.of("UTC"));
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
String output = dateTimeFormatter.format(localDateTime);

这是localDateTime

的值
2015-12-30T01:26:32.953

这是output

的值
2016-12-30T01:26:32.953Z

为什么会增加一年?

java.time.temporal.WeekFields中,有一些方法newYearWeek,有时会将年份增加1。为什么呢?

这是一个奇怪的错误。

1 个答案:

答案 0 :(得分:2)

来自Wikipedia

  

[YYYY]表示ISO周编号年份略有下降   与传统的公历年不同(见下文)。

  1. YYYY是当年的ISO-8601风格代表。
  2. yyyy是格里高利时代的代表。
  3. 由于两者的计算可以相差+1或-1,因此格式化。更详细的信息来自YEAR_OF_ERAYEARweekBasedYear