Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java Instant格式化为";YYYYMMdd“;多加一年?_Java_Datetime_Dateformatter - Fatal编程技术网

将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
表示根据的官方文件以周为基础的年份。更多关于它是如何计算的

如果将日期格式化程序与smallcase
y
作为
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