Java 默认情况下,LocalDateTime不是ISO8601
我使用Java 默认情况下,LocalDateTime不是ISO8601,java,jackson,Java,Jackson,我使用LocalDateTime来表示时间。 在调试模式中,我注意到时间格式不在ISO8601中,这使得我很难直接发送到其他API 请求类: public class AgreementRequest { @NonNull private String name; @NonNull private String description; @JsonProperty("start_date") @DateTimeFormat(iso = DATE_T
LocalDateTime
来表示时间。
在调试模式中,我注意到时间格式不在ISO8601中,这使得我很难直接发送到其他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();
LocalDateTime.toString
在ISO8601中不存在,ISO8601中的字母z
也不存在
我有objectMapper.configure(SerializationFeature.WRITE_DATES_作为时间戳,false)代码>已禁用,这是问题所在吗
LocalDateTime.toString
在ISO8601中不存在,ISO8601中的字母Z
也不存在
对日期的描述,用于生日,与挂钟上显示的当地时间相结合。如果没有诸如偏移量或时区之类的附加信息,它不能表示时间线上的某个瞬间
Z
是UTC零偏移量的区域指示符,这就是从实例调用时看不到它的原因。如果需要时区或偏移量,请使用或
到(de)序列化杰克逊类型,请考虑。有关详细信息,请参阅
我应该使用Instant
而不是LocalDateTime
?如果是这样,我应该在PostgreSQL数据库中更改什么
检查PostgreSQL JDBC驱动程序对此的说明:
PostgreSQL™ JDBC驱动程序使用JDBC 4.2实现对(JSR-310)的本机支持
PostgreSQL™ | Java SE 8
--------------------------------+----------------
DATE | LocalDate
TIME [ WITHOUT TIMEZONE ] | LocalTime
TIMESTAMP [ WITHOUT TIMEZONE ] | LocalDateTime
TIMESTAMP WITH TIMEZONE | OffsetDateTime
[…]请注意,ZonedDateTime
、Instant
和OffsetTime
/TIME[无时区]
不受支持。还要注意的是
OffsetDateTime
will实例将使用UTC(偏移量为0)
这是因为后端将它们存储为UTC
LocalDateTime.toString在ISO8601中不存在,ISO8601中的字母z也不存在。ISO-8601不需要字符串上的时区;显示的字符串是完全有效的ISO-8601日期时间字符串。如果没有时区,ISO-8601假定为“本地时间”。假定类为LocalDateTime
,则该表示有意义。“本地”部分表示LocalDateTime用于没有时区的日期/时间。我是否应该使用Instant
而不是LocalDateTime
?如果是这样,我应该在PostgreSQL DB中更改什么?@Cosaic请参阅@Cosaic使用即时
了解实际时刻,时间线上的一个点,以UTC为单位。当您指的是所有时区或任何时区时,请使用LocalDateTime
。它们是完全不同的动物,根本不能互换,因为LocalDateTime
不能代表一个时刻。请参阅:。或者,如果您始终希望使用UTC时区,请使用Instant
ZonedDateTime
/OffsetDateTime
s仅在希望使用可变时区时有用。请注意,如果保存到诸如postgres之类的数据库(仅保存utc时间戳),实际时区可能会丢失。(某些)JPA实现支持它们。如果UTC中有一个Instant
,我会将其转换为LocalDateTime
,并将其存储在DB中。这是一个有效的过程吗?@Cosaic,视情况而定Instant
和LocalDateTime
是不同的东西。看看这个来自巴兹尔布尔克的。