java - 默认情况下 LocalDateTime 不是 ISO8601

标签 java jackson

我正在使用 LocalDateTime 来表示时间。 在 Debug模式下,我注意到时间格式不是 ISO 8601,这让我很难直接发送到其他 api。

请求类:

public class AgreementRequest {
    @NonNull
    private String name;
    @NonNull
    private String description;
    @JsonProperty("start_date")
    @DateTimeFormat(iso = DATE_TIME)
    @NonNull
    private String startDate;
}

初始化:

request = AgreementRequest.builder()
                .name("Premium subscription")
                .description("Montly subscription")
                .startDate(LocalDateTime.now().plusDays(1).toString()).build();

enter image description here

LocalDateTime.toString 也不在 ISO 8601 中,ISO8601 中的字母 z 没有了。

我禁用了 objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);,这是问题所在吗?

最佳答案

The LocalDateTime.toString is not either in ISO 8601, the letter Z in ISO8601 is gone.

LocalDateTime日期的描述,如用于生日,结合挂钟上看到的本地时间。如果没有偏移量或时区等附加信息,它不能代表时间线上的一个瞬间。

Z 是零 UTC 偏移的区域指示符,这就是为什么在调用 toString() 时看不到它的原因来自LocalDateTime实例。使用 ZonedDateTimeOffsetDateTime如果您需要时区或偏移量。

序列化(反)JSR-310类型与 jackson ,考虑 JavaTimeModule .查看documentation了解详情。


Should I use Instant instead of LocalDateTime? If so, what should I change in my PostgreSQL DB?

检查什么是PostgreSQL JDBC驱动documentation说:

The PostgreSQL™ JDBC driver implements native support for the Java 8 Date and Time API (JSR-310) using JDBC 4.2.

PostgreSQL™                     | Java SE 8
--------------------------------+----------------
DATE                            | LocalDate
TIME [ WITHOUT TIMEZONE ]       | LocalTime
TIMESTAMP [ WITHOUT TIMEZONE ]  | LocalDateTime
TIMESTAMP WITH TIMEZONE         | OffsetDateTime

[...] Note that ZonedDateTime, Instant and OffsetTime / TIME [ WITHOUT TIMEZONE ] are not supported. Also note that all OffsetDateTime will instances will have be in UTC (have offset 0).

This is because the backend stores them as UTC.

关于java - 默认情况下 LocalDateTime 不是 ISO8601,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169272/

相关文章:

java - Json转java

java - 使用 Jackson 库将 Java HashMap 转换为 XML

java - Logback JNDI 连接源

java - 在多个地方配置 Spring Security

java - CardboardView 如何处理头部运动?

java - 从 Jackson JsonNode 创建 InputStream 的最佳方式是什么?

java - 使用 Jackson 对 Scala 案例类进行(反)序列化

java - 使用 Jakson 从 Spring 到网络的日期作为时间戳

java - SWT Style Flag - 哪些适用于复合 Material ?

java - 没有看到任何对 Callable.call() 方法的调用,但 call() 方法内部的代码仍然被执行,call() 方法在哪里被调用?