我用LocalDateTime
来表示时间。在调试模式下,我注意到时间格式不是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();
ISO 8601中的LocalDateTime.toString
也没有,ISO 8601中的z
也没有了。
我有objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
禁用,这是问题吗?
1条答案
按热度按时间envsm3lx1#
LocalDateTime.toString
在ISO 8601中也没有,字母Z
在ISO 8601中消失了。LocalDateTime
日期的描述,用于生日,与挂钟上显示的当地时间相结合。它不能表示时间线上的一个时刻,而没有附加信息,如偏移量或时区。Z
是零UTC偏移量的区域指示符,这就是为什么从LocalDateTime
示例调用toString()
时看不到它。如果需要时区或偏移量,请使用ZonedDateTime
或OffsetDateTime
。要使用Jackson序列化(反序列化)JSR-310类型,请考虑
JavaTimeModule
。详情请参阅documentation。我应该使用
Instant
而不是LocalDateTime
吗?如果是,我应该在我的PostgreSQL DB中更改什么?检查PostgreSQL JDBC驱动程序documentation是怎么说的:
PostgreSQL™ JDBC驱动程序使用JDBC 4.2实现了对Java 8 Date and Time API(JSR-310)的本机支持。
这与JDBC 4.2规范的表B-4和B-5非常一致。
注意
不支持
ZonedDateTime
、Instant
和OffsetTime / TIME [ WITHOUT TIMEZONE ]
。还要注意,所有OffsetDateTime
示例都将使用UTC(偏移量为0)。这是因为后端将它们存储为UTC。