java ZoneDateTime.format问题

nkkqxpd9  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(345)

这个问题在这里已经有答案了

为什么java的java.time.format.datetimeformatter#format(localdatetime)会增加一年(1个答案)
SimpleDataFormat解析“yyyy-mm-dd hh:mm”时产生错误的日期时间(5个答案)
y返回2012,y返回2011,格式为simpledateformat(5个答案)
java SimpleDataFormat解析错误的日期(2个答案)
java解析字符串到一个日期返回不正确的日期(5个答案)
8天前关门了。
遇到 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热点java 10(java版本“10.0.2”2018-07-17)
openjdk版本“11.0.9.1”2020-11-04
如果您对lisps还满意,那么您可以在cloud repl中看到它

vohkndzv

vohkndzv1#

将模式字符串更改为 yyyy-MM-dd . 请参阅javadoc以获取类 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
kuhbmx9i

kuhbmx9i2#

好的,找到了。只是我的格式错误。
y代表以周为单位的年
y代表纪年
你只是一年
所以使用 "uuuu-MM-dd" 一切正常

相关问题