Java ZonedDateTime.format 问题
Java ZonedDateTime.format issue
运行 到 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
如果您对 Lisp 没问题 – 您可以在云 REPL 中亲自查看 here
将模式字符串更改为 yyyy-MM-dd
。
参考javadoc for class DateTimeFormatter
了解YYYY
和yyyy
的区别。
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
好的,找到了。这只是我的格式错误。
- Y 表示基于周的年份
- y 代表时代年份
- 你只是一年
所以使用 "uuuu-MM-dd"
一切正常
运行 到 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
如果您对 Lisp 没问题 – 您可以在云 REPL 中亲自查看 here
将模式字符串更改为 yyyy-MM-dd
。
参考javadoc for class DateTimeFormatter
了解YYYY
和yyyy
的区别。
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
好的,找到了。这只是我的格式错误。
- Y 表示基于周的年份
- y 代表时代年份
- 你只是一年
所以使用 "uuuu-MM-dd"
一切正常