Java ZoneDateTime.format问题

Java ZoneDateTime.format问题,java,zoneddatetime,datetimeformatter,Java,Zoneddatetime,Datetimeformatter,遇到zoneDateTime格式问题。它将2020年12月底的日期格式化为2021年的日期。 Java代码片段 ZonedDateTime z1=ZonedDateTime.of(LocalDateTime.of(2020,12,31,0,0),ZoneId.of(“美国/纽约”); z1.格式(模式的DateTimeFormatter.of(“YYYY-MM-dd”)) //收益率“2021-12-31” 12月28日、29日、30日也是如此。不同时区的结果相同。 2019年12月30日重复

遇到
zoneDateTime
格式问题。它将2020年12月底的日期格式化为2021年的日期。 Java代码片段

ZonedDateTime z1=ZonedDateTime.of(LocalDateTime.of(2020,12,31,0,0),ZoneId.of(“美国/纽约”);
z1.格式(模式的DateTimeFormatter.of(“YYYY-MM-dd”))
//收益率“2021-12-31”
12月28日、29日、30日也是如此。不同时区的结果相同。 2019年12月30日重复(格式为2020-12-30)

原始Clojure片段

(让[zdt(ZonedDateTime/of(LocalDateTime/of 2020 12 31 0 0)(ZoneId/of“美国/纽约”))
f(DateTimeFormatter/of模式“YYYY-MM-dd”)]
(.格式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–您可以在cloud REPL中自己看到它

将模式字符串更改为
yyyy-MM-dd
。 请参阅类
DateTimeFormatter
,了解
YYYY
YYYY
之间的区别

ZonedDateTime z1=ZonedDateTime.of(LocalDateTime.of(2020,12,31,0,0),ZoneId.of(“美国/纽约”);
System.out.println(z1.format(模式的DateTimeFormatter.of(“yyyy-MM-dd”));
结果:

2020-12-31

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

  • Y表示以周为基础的年份
  • y代表纪年
  • 你只是一年

因此,使用
“uuu MM dd”
这一切都是有效的

是的,或者更简单地说,
DateTimeFormatter.ISO\u LOCAL\u DATE