datetimeformatter问题

q9yhzks0  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(239)

请参阅以下测试代码(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日。
有人能给我解释一下吗?如何修复代码以获得正确的格式化字符串?
cxfofazt

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的文档页,以了解有关这些内容的更多信息。
快速演示:

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        final String DATE_FORMAT_TIMESTAMP = "uuuu-MM-dd'T'HH:mm:ssZ";
        // OffsetDateTime now with the default timezone of the JVM
        var timestamp = OffsetDateTime.now();
        System.out.println(timestamp);

        var formatter = DateTimeFormatter.ofPattern(DATE_FORMAT_TIMESTAMP);
        var zt = timestamp.format(formatter);
        System.out.println(zt);

        // OffsetDateTime now with the timezone offset of +02:00 hours
        timestamp = OffsetDateTime.now(ZoneOffset.of("+02:00"));
        System.out.println(timestamp);
        zt = timestamp.format(formatter);
        System.out.println(zt);

        // Parsing a user-provided date-time
        String strDateTime = "2020-12-27T23:34:34.886272600+02:00";
        timestamp = OffsetDateTime.parse(strDateTime);
        System.out.println(timestamp);
        zt = timestamp.format(formatter);
        System.out.println(zt);
    }
}

输出:

2020-12-27T23:44:35.531145Z
2020-12-27T23:44:35+0000
2020-12-28T01:44:35.541700+02:00
2020-12-28T01:44:35+0200
2020-12-27T23:34:34.886272600+02:00
2020-12-27T23:34:34+0200
ggazkfy8

ggazkfy82#

那是因为大写字母 YYYY . 你需要 yyyy 在这里。 Y 指一年中的一周。这是周数所属的年份。例如,2020年12月27日是2021年的第一周。

相关问题