将Java Instant格式化为";YYYYMMdd“;多加一年?
这是漫长的一天,我的大脑很累,所以也许我完全错过了一些东西,但为什么当我运行这条线路时将Java Instant格式化为";YYYYMMdd“;多加一年?,java,datetime,dateformatter,Java,Datetime,Dateformatter,这是漫长的一天,我的大脑很累,所以也许我完全错过了一些东西,但为什么当我运行这条线路时 System.out.println( DateTimeFormatter.ofPattern("YYYYMMdd") .withZone(ZoneId.of("UTC")) .format(Instant.parse("2020-12-31T08:00:00Z")) ) ) 我得到的是20211231,而不是20201231?额外的年份从何而来?您想要小写的y- S
System.out.println(
DateTimeFormatter.ofPattern("YYYYMMdd")
.withZone(ZoneId.of("UTC"))
.format(Instant.parse("2020-12-31T08:00:00Z"))
)
)
我得到的是
20211231
,而不是20201231
?额外的年份从何而来?您想要小写的y-
System.out.println(
DateTimeFormatter.ofPattern("yyyyMMdd")
.withZone(ZoneId.of("UTC"))
.format(Instant.parse("2020-12-31T08:00:00Z"))
);
大写字母
Y
表示根据的官方文件以周为基础的年份。更多关于它是如何计算的
如果将日期格式化程序与smallcasey
作为yyyyymmdd
一起使用,则此功能可以正常工作
System.out.println(DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.of("UTC"))
.format(Instant.parse("2020-12-31T08:00:00Z")));
输出:
20201231
根据,Y
是基于周的年份。这意味着返回日期所在周的年数
事实上,2020年12月31日实际上是2021年的第1周,因此返回的是2021年而不是2020年
您可能想改用yyyy