【发布时间】:2020-06-15 08:11:55
【问题描述】:
@Entity
@Table(name="friend")
public class Friend {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="birthday")
private Date birthday;
public Date getBirthday() {
System.out.println("getter" + this.birthday);
return this.birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
我在这里使用java.sql.Date 将生日插入我的 MySQL 数据库。对于 setter,我使用表单标签和模型属性从 jsp 页面以 yyyy-MM-dd 的形式将日期作为字符串获取。设置后,我检查了我的 db 表,日期与预期一致,但是当我调用 getter 时,日期提前了一天(例如,如果我的 db 中有 2000-06-20,则 getter 返回 2000-06-19 )。
【问题讨论】:
-
很有可能时区是问题所在,
System.out.println中记录的内容与客户端中呈现的本地日期时间不同。有 3 个可能的时区在起作用:MySQL 服务器。运行 Java 的服务器和呈现日期的客户端。通常服务器(数据库和应用程序服务器)采用 UTC。你可以好好阅读 Joda Time 图书馆。 -
@GregHNZ 是对的,但您不必再使用 JodaTime,因为 Java 8 有 Java DateTime API,您可以使用 LocalDate 而不是 java.sql.Date。但这并不能解决你的问题。
-
这个问题很可能是"date goes back one day"的重复问题
-
这能回答你的问题吗? Getting the date goes back one day
标签: java spring hibernate date