&引用;“迁移”;从属性的经典java.util.Date类型到等效的java.time类型

&引用;“迁移”;从属性的经典java.util.Date类型到等效的java.time类型,java,datetime,java.util.date,java-time,Java,Datetime,Java.util.date,Java Time,声明表示数据库中DATETIME字段的日期属性的合适类型是什么 这个问题的目的是看看我是否可以在当前构建的实体的日期属性中使用java.time而不是java.util.Date,由于一些java.util.Date方法已被弃用,通常建议使用java.time作为带有时间的Date值,如果使用JDBC类型,请使用。有一些方法可以帮助转换: LocalDate localDate = sqlDate.toLocalDate(); Date sqlDate = Date.valueOf(local

声明表示数据库中
DATETIME
字段的日期属性的合适类型是什么


这个问题的目的是看看我是否可以在当前构建的实体的日期属性中使用
java.time
而不是
java.util.Date
,由于一些
java.util.Date
方法已被弃用,通常建议使用
java.time
作为带有时间的
Date
值,如果使用JDBC类型,请使用。有一些方法可以帮助转换:

LocalDate localDate = sqlDate.toLocalDate();

Date sqlDate = Date.valueOf(localDate);
LocalDateTime localDateTime = timestamp.toLocalDateTime();

Timestamp timestamp = Timestamp.valueOf(localDateTime);
Instant instant = timestamp.toInstant();

Timestamp timestamp = Timestamp.from(instant);

对于<代码>时间戳<代码> >代码> DATETECT/<代码>值,在这里您已经使用JDBC类型,这取决于您是否需要考虑时区。

如果应用程序、其用户和数据库都位于同一时区,则可以使用。有一些方法可以帮助转换:

LocalDate localDate = sqlDate.toLocalDate();

Date sqlDate = Date.valueOf(localDate);
LocalDateTime localDateTime = timestamp.toLocalDateTime();

Timestamp timestamp = Timestamp.valueOf(localDateTime);
Instant instant = timestamp.toInstant();

Timestamp timestamp = Timestamp.from(instant);
若用户位于多个时区,则应始终以UTC格式将值保存到数据库中,所以应使用。有一些方法可以帮助转换:

LocalDate localDate = sqlDate.toLocalDate();

Date sqlDate = Date.valueOf(localDate);
LocalDateTime localDateTime = timestamp.toLocalDateTime();

Timestamp timestamp = Timestamp.valueOf(localDateTime);
Instant instant = timestamp.toInstant();

Timestamp timestamp = Timestamp.from(instant);
然后,您可能希望转换为用户的本地时区进行显示,例如:

ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("America/New_York"));
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();

数据库将需要java.sql.Date或java.sql.Timestamp。这一点没有改变。您应该能够轻松地创建java.time等价物。@duffymo您是对的。您认为
java.time.Instant
是否与
java.sql.Date
兼容,或者至少与
java.sql.Timestamp
兼容?我认为对于简单的yyyy-MMM-dd,Instant将是时间戳和本地日期的选择。