我正在Spring Boot中使用Rest API,我们正在使用出色的库Joda Time。由于我的服务器配置为在UTC时区工作,因此无需在其中具有DateTime
信息的整个应用程序DateTimeZone
中使用。我们更喜欢使用LocalDateTime
在系统中存储所有日期。
现在的问题是有关以IOS 8601格式打印LocalDateTime
。看看下面的代码:
TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // server timezone
DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); // yyyy-MM-dd'T'HH:mm:ss.SSSZZ
LocalDateTime createdAtLocalDateTime = LocalDateTime.now();
DateTime createdAtDateTime = user.getCreatedAt().toDateTime(DateTimeZone.UTC);
logger.info("DT: {}", fmt.print(createdAtDateTime));
logger.info("LDT: {}", fmt.print(createdAtLocalDateTime));
这将输出以下结果:
DT: 2019-03-20T20:19:19.691Z
LDT: 2019-03-20T20:37:00.642
因此,在序列化Z
时最后没有LocalDateTime
,但是在UTC时区序列化Z
时却有DateTime
。
现在是问题:在序列化Z
实例期间,如何配置格式化程序以在末尾(此LocalDateTime
字母)输出此TimeZone信息。我知道它始终在UTC中,但是我们的一个消耗图书馆希望此时区信息,但不幸的是我们无法更改其中的代码。
更好的问题:如何配置杰克逊ObjectMapper
以将LocalDateTime
最后的信息Z
序列化为json?
添加到格式化程序fmt.withZoneUTC()
无效。
答案 0 :(得分:1)
您可以在格式化程序后面附加文字文字:
DateTimeFormatter fmt = new DateTimeFormatterBuilder()
.append(ISODateTimeFormat.dateTime())
.appendLiteral('Z')
.toFormatter();