将 Java Instant 格式化为“YYYYMMdd”会增加额外的一年吗?

gur*_*ing 4 java datetime dateformatter

这是漫长的一天,我的大脑很累,所以也许我完全错过了一些东西,但为什么当我运行这条线时,

System.out.println(
  DateTimeFormatter.ofPattern("YYYYMMdd")
    .withZone(ZoneId.of("UTC"))
    .format(Instant.parse("2020-12-31T08:00:00Z"))
  )
)
Run Code Online (Sandbox Code Playgroud)

我得到20211231而不是20201231?额外的一年从哪里来?

小智 7

你想要小写 y -

        System.out.println(
            DateTimeFormatter.ofPattern("yyyyMMdd")
                    .withZone(ZoneId.of("UTC"))
                    .format(Instant.parse("2020-12-31T08:00:00Z"))
    );
Run Code Online (Sandbox Code Playgroud)


sta*_*Fan 5

Y根据DateTimeFormatter的官方文档,大写字母代表基于周的年份。有关如何计算的更多信息,请参见此处

y如果您使用带有小写字母的日期格式化程序,则效果很好yyyyMMdd

System.out.println(DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.of("UTC"))
            .format(Instant.parse("2020-12-31T08:00:00Z")));
Run Code Online (Sandbox Code Playgroud)

输出:

20201231
Run Code Online (Sandbox Code Playgroud)


MC *_*ror 5

根据 的文档DateTimeFormatterY基于周的年份。这意味着返回日期所在周的年份数。

事实上,2020 年 12 月 31 日实际上是 2021 年的第一周,因此返回的是 2021 年而不是 2020 年。

您可能想使用yyyy它。


归档时间:

查看次数:

8995 次

最近记录:

5 年,10 月 前