当前位置: 首页 > 知识库问答 >
问题:

我正在尝试将格式字符串“2019-11-15T18:30:00Z”转换为日期格式。我也附上了代码[副本]

易琛
2023-03-14
String data = "2019-11-15T18:30:00Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
LocalDateTime date = LocalDateTime.parse(data, formatter);
System.out.println(data + "\t" + date);

当我试图打印转换后的日期时,我没有得到所需格式的日期。

< code >输出:2019-11-15t 18:30:00 z 2019-11-15t 18:30

为什么转换日期中缺少秒部分和“Z”

共有1个答案

缪英锐
2023-03-14

对于您缺少的两个部分,有两种不同的解释:

>

  • 为什么是秒部分

    LocalDateTime.toString()(当您将日期时间连接到字符串时隐式调用)如果秒(和秒的小数部分)为零,则省略秒。引用文档:

    使用的格式将是输出省略部分暗示为零的时间的完整值的最短格式。

    转换日期中缺少“Z”

    原始字符串中的Z是UTC的偏移量(零)。LocalDateTime没有UTC偏移量,因此在解析为LocalDateTime时,您将丢失此信息。再次引用留档是LocalDateTime

    ISO-8601日历系统中不带时区的日期时间,如2007-12-03T10:15:30。

    若要保留偏移量,请使用< code>OffsetDateTime而不是< code>LocalDateTime:

        String data = "2019-11-15T18:30:00Z";
        OffsetDateTime date = OffsetDateTime.parse(data);
        System.out.println(data + "\t" + date);
    

    输出:

    2019-11-15T18:30:00Z 2019-12-15T17:30Z

    还是没有秒针。要在它们为零的情况下打印它们,请使用< code>DateTimeFormatter,就像您已经在使用的那个一样,只用于格式化:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
        System.out.println(data + "\t" + date.format(formatter));
    

    2019-11-15T18:30:00Z 2019-11-15T18:30:00Z

    只有永远不要将Z硬编码为格式模式字符串中的文字。正如我所说,它是一个偏移量。如果您硬编码它,当有一天您获得具有不同偏移量的OffsetDateTime时,您也会打印Z,并且您的输出将完全错误。相反,使用模式字母X作为偏移量。

    • LocalDateTime
    • 的文档
    • LocalDateTime的文档。toString()
    • 一个密切相关的问题:将时间戳解析为LocalDateTime
    • 另一个相关问题:在Java8中使用时区格式化LocalDateTime

  •  类似资料:
    • 当我尝试打印转换后的日期时,我没有得到所需格式的日期。

    • 问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。

    • 我得到一串零。有人能帮忙吗?

    • 我在presto上,把日期格式化为varchar,看起来像- 我如何转换这个?

    • 问题内容: 我正在尝试将字符串转换为日期格式,我尝试了很多方法来实现此目的,但是没有成功。我的字符串是“ 2012年1月17日”。我想将其转换为“ 2011-10-17”。有人可以告诉我这样做的方法吗?如果您通过示例工作过,那将是真正的帮助! 问题答案:

    • 问题内容: 我有一个包含日期格式的字符串。 您如何建议我以最佳方式将其转换为格式? 这就是我天真地做的事情: 但是还有其他更优雅,更有效的方法吗?就是 使用一些内置功能?快速搜寻API时,我找不到一个。 这里有人知道替代方法吗? 问题答案: 用途: