我需要将 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,如果需要,您可以提供此格式的示例吗?
没有标准格式化程序可以提供您想要的确切结果。使用
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
进行解析,因为它更加灵活和宽松。