如何使用 DateTimeFormatter 正确格式化 JSON (Javascript) 的 Java LocalDateTime?

问题描述 投票:0回答:1

我需要将 Java

java.time.LocalDateTime
格式化为与此格式匹配的 JSON 字符串:

2023-09-17T00:00:00.000+00:00

我正在查看

DateTimeFormatter.ISO_DATE_TIME
定义我的 LocalDateTime :

date.plusDays(daysToAdd)
   .atZone(ZoneOffset.UTC)
   .format(DateTimeFormatter.ISO_DATE_TIME)

但这会产生:

2023-09-17T00:00:00Z

此日期格式是否有预定义的格式化程序?我是否需要创建一个自定义 DateTimeFormatter,如果需要,您可以提供此格式的示例吗?

java scala java-time
1个回答
1
投票

没有标准格式化程序可以提供您想要的确切结果。使用

Z
表示偏移量 0 是标准的(可能源自 ISO 8601,但我懒得验证)。

对于您想要的格式,您需要构建它。我的示例是用 Java 编写的,但我认为它会直接转换为 Scala:

public static void main(String[] args) {
    var date = LocalDateTime.parse("2023-09-17T00:00:00");

    var fm = new DateTimeFormatterBuilder()
            .append(DateTimeFormatter.ISO_DATE)
            .appendLiteral('T')
            .appendValue(HOUR_OF_DAY, 2)
            .appendLiteral(':')
            .appendValue(MINUTE_OF_HOUR, 2)
            .appendLiteral(':')
            .appendValue(SECOND_OF_MINUTE, 2)
            .appendFraction(MILLI_OF_SECOND, 3, 3, true)
            .appendOffset("+HH:mm", "+00:00")
            .toFormatter();

    System.out.println(date.atOffset(ZoneOffset.UTC).format(fm));
}

满足您要求的最重要部分是:

  • .appendFraction(MILLI_OF_SECOND, 3, 3, true)

    确保秒小数部分以 3 位数呈现。

  • .appendOffset("+HH:mm", "+00:00")

    将偏移量渲染为

    {+/-}HH:mm
    (例如
    -01:00
    ),将偏移量 0 渲染为
    +00:00

输出:

2023-09-17ZT00:00:00.000+00:00

请注意,最好仅使用此格式化程序来格式化日期,并使用

ISO_DATE_TIME
进行解析,因为它更加灵活和宽松。

© www.soinside.com 2019 - 2024. All rights reserved.