首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateTimeFormatter问题

DateTimeFormatter问题
EN

Stack Overflow用户
提问于 2020-12-27 21:45:15
回答 2查看 177关注 0票数 1

请参阅以下测试代码(java 11):

代码语言:javascript
复制
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

代码语言:javascript
复制
2020-12-27T23:34:34.886272600+02:00
2021-12-27T23:34:34Z

注格式化的时间年为2021。这只发生在27/12,很可能一直到31/12。

有人能给我解释一下吗?以及如何修复代码以获得正确的格式化字符串?

EN

回答 2

Stack Overflow用户

发布于 2020-12-27 23:25:16

您的模式有两个问题:

  1. 字母Y使用而不是,字母Y指定week-based-year,而y指定year-of-era。但是,出于在u中提到的原因,我建议您使用y而不是y。您还想检查一下这个好听的回答关于week-based-year的内容。
  2. Z 用单引号将括起来:这是的错误。字母Z指定zone-offset,如果用单引号将其括起来,它将简单地表示文字Z

查看DateTimeFormatter文档页面,了解更多关于这些事情的信息。

快速演示:

代码语言:javascript
复制
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);
    }
}

输出:

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2020-12-27 21:46:58

这是因为大写的YYYY。你需要yyyy在这里。

Y指的是每周一年。那是周数属于的年份。例如,2020年12月27日是2021年的第一周。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65470770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档