请参阅以下测试代码(java 11):
public static final String DATE_FORMAT_TIMESTAMP = "YYYY-MM-dd'T'HH:mm:ss'Z'";
...
var timestamp = OffsetDateTime.now();
System.out.println(timestamp);
var formatter = DateTimeFormatter.ofPattern(DATE_FORMAT_TIMESTAMP);
var zt = timestamp.format(formatter);
System.out.println(zt);
...
输出: enter code here
```
2020-12-27T23:34:34.886272600+02:00
2021-12-27T23:34:34Z
注:格式化时间年为2021年。它只发生在2012年12月27日,可能一直到2012年12月31日。
有人能给我解释一下吗?如何修复代码以获得正确的格式化字符串?
2条答案
按热度按时间cxfofazt1#
您的模式有两个问题:
使用
Y
而不是y
:信件Y
指定week-based-year
鉴于y
指定year-of-era
. 但是,我建议您使用u
而不是y
因为在java?中“datetimeformatter”格式化模式代码中“uuuu”和“yyyy”提到的原因?。你还想看看这个关于week-based-year
.封闭的
Z
引用一句话:这是一个错误。这封信Z
指定zone-offset
如果你用单引号括起来,它的意思就是字面意思,Z
.请查看datetimeformatter的文档页,以了解有关这些内容的更多信息。
快速演示:
输出:
ggazkfy82#
那是因为大写字母
YYYY
. 你需要yyyy
在这里。Y
指一年中的一周。这是周数所属的年份。例如,2020年12月27日是2021年的第一周。