如何将日期分配给 java 中的临时日期字段?

How to assign date to Temporal date field in java?

我有一个字段类型为 Date 的实体,我用 @Temporal(DATE) 对其进行了注释。现在如何在该字段中存储值?使用设置方法还是自动创建?

这是我的代码:

@Temporal(TemporalType.DATE)
private Date deleted_At;

        

java.util.Date javaDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(javaDate.getTime());
clientToDelete.setDeleted_At(sqlDate);

这是正确的吗?

java.time

我建议您使用 java.time,现代 Java 日期和时间 API,用于约会工作。用于没有时间的日期的 class 是 LocalDate.

private LocalDate deletedAt;

(无需注释。)将其设置为今天的日期:

    clientToDelete.setDeletedAt(LocalDate.now(ZoneId.systemDefault()));

java.time 从 Hibernate 5 开始支持。

如果无法更改字段类型,仍使用LocalDate设置值:

    clientToDelete.setDeletedAt(java.sql.Date.valueOf(
                     LocalDate.now(ZoneId.systemDefault())));

Do i need to set zoneid somewhere or its inbuilt?

编辑:所有时区的日期都不同。因此,如果需要,您需要选择今天日期所在的时区。您的程序所在的 JVM 运行 始终有一个默认时区,这就是我使用 ZoneId.systemDefault() 时的默认时区。默认时区通常取自操作系统。它也可以在您启动 JVM 时或在任何时候从程序中显式设置。您也可以在调用 LocalDate.now() 时指定时区,例如 LocalDate.now(ZoneId.of("America/Chihuahua")).

Is this correct?

不,您所做的并不完全正确。根据文档,java.sql.Date 必须将一天中的时间设置为一天的开始(通常是 00:00),您无法从向我们展示的代码中获得这一点。文档引用:

To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.

来自 java.sql.Date 的文档。

链接