【问题标题】:Why does Java's java.time.format.DateTimeFormatter#format(LocalDateTime) add a year?为什么Java的 java.time.format.DateTimeFormatter#format(LocalDateTime) 加一年?
【发布时间】:2016-04-03 23:14:06
【问题描述】:

这是代码:

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。为什么?

这是一个奇怪的错误。

【问题讨论】:

标签: java time localization utc datetimeformatter


【解决方案1】:

来自Wikipedia

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

  1. YYYY 是今年的 ISO-8601 样式表示。
  2. yyyy 是公历年份的表示。

由于两者的计算可以相差+1或-1,因此格式。更多有用信息请访问 YEAR_OF_ERAYEARweekBasedYear

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多