在 Java 中选择 LocalDateTime
、LocalDate
还是 Date
放在实体类(如 JPA 实体)上,主要取决于你:
下面逐一说明它们的区别和适用场景,并给出推荐:
LocalDateTime
表示:日期+时间(无时区),如 2025-05-26T15:30:00
特点:
数据库映射:在 JPA 中通常映射为 TIMESTAMP
类型
推荐使用场景:
LocalDate
表示:仅日期(无时间),如 2025-05-26
特点:
数据库映射:JPA 中可映射为 DATE
推荐使用场景:
Date
(旧类)表示:日期+时间(带时区,实际存的是 UTC 时间)
特点:
数据库映射:JPA 也支持,但往往需要做格式转换
不推荐使用:除非项目是老项目,或外部库/接口强制要求使用 Date
场景 | 推荐类型 | 原因 |
---|---|---|
需要日期+时间 | LocalDateTime |
无时区,线程安全,现代API |
仅需要日期 | LocalDate |
简洁清晰,适合业务日期 |
与旧接口兼容 | Date |
尽量局限在接口交互层使用,不要放在实体类上 |
全新项目优先用 LocalDateTime
和 LocalDate
JPA 支持 Java 8 时间类型(Spring Boot 2+ 默认支持)
可用 @Column
注解控制数据库精度和格式,如:
@Column(name = "created_at")
private LocalDateTime createdAt;
@Entity
public class User {
@Id
private Long id;
private String name;
private LocalDate birthday; // 只要日期
private LocalDateTime createdAt; // 要精确时间
}
现代 Java 项目中,实体类优先使用
LocalDate
和LocalDateTime
,避免再使用老旧的Date
。
如需兼容旧接口,可在 DTO 或转换层中用 Date
处理。实体类保持干净、类型明确。