为什么 Java 的 java.time.format.DateTimeFormatter#format(LocalDateTime) 添加一年?
Why does Java's java.time.format.DateTimeFormatter#format(LocalDateTime) add a year?
这是代码:
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
。为什么?
这是一个奇怪的错误。
来自Wikipedia:
[YYYY] indicates the ISO week-numbering year which is slightly
different from the traditional Gregorian calendar year (see below).
YYYY
是年份的 ISO-8601 样式表示。
yyyy
是公历 year-of-era 表示法。
由于两者的计算可以相差+1或-1,因此格式化。 YEAR_OF_ERA
, YEAR
, and weekBasedYear
.
处提供更多有用信息
这是代码:
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
。为什么?
这是一个奇怪的错误。
来自Wikipedia:
[YYYY] indicates the ISO week-numbering year which is slightly different from the traditional Gregorian calendar year (see below).
YYYY
是年份的 ISO-8601 样式表示。yyyy
是公历 year-of-era 表示法。
由于两者的计算可以相差+1或-1,因此格式化。 YEAR_OF_ERA
, YEAR
, and weekBasedYear
.