0

遇到ZonedDateTime格式问题。它将 2020 年 12 月末的日期格式化为 2021 年的日期。Java 片段

ZonedDateTime z1 = ZonedDateTime.of(LocalDateTime.of(2020, 12, 31, 0, 0), ZoneId.of("America/New_York"));
z1.format(DateTimeFormatter.ofPattern("YYYY-MM-dd"))
// yields "2021-12-31"

12 月 28 日、29 日、30 日也是如此。不同时区的结果相同。2019 年 12 月 30 日重复(格式为 2020-12-30)。

原始 Clojure 代码段

(let [zdt (ZonedDateTime/of (LocalDateTime/of 2020 12 31 0 0) (ZoneId/of "America/New_York"))
      f (DateTimeFormatter/ofPattern "YYYY-MM-dd")]
  (.format zdt f))
; => "2021-12-31"

我能够复制:

  • MacOS HotSpot Java 10(java版本“10.0.2”2018-07-17)
  • OpenJDK版本“11.0.9.1” 2020-11-04

如果你对 Lisps 没问题——你可以在云 REPL 中亲眼看到

4

2 回答 2

5

将模式字符串更改为yyyy-MM-dd. 请参阅类的javadoc以了解和DateTimeFormatter之间的区别。YYYYyyyy

ZonedDateTime z1 = ZonedDateTime.of(LocalDateTime.of(2020, 12, 31, 0, 0), ZoneId.of("America/New_York"));
System.out.println(z1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

结果:

2020-12-31
于 2021-01-01T08:15:37.217 回答
2

好的,找到了。这只是我的格式错误。

  • Y 是基于周的年份
  • y 代表时代
  • 你只是一年

所以使用"uuuu-MM-dd",一切正常

于 2021-01-01T08:24:33.603 回答