JPA java.util.Date问题

时间:2014-03-10 07:53:40

标签: java hibernate jpa

我在数据库中有日期字段,其值为“27-AUG-10 15:30:00”。我正在使用JPA来检索并设置为模型对象。在模型对象中,日期是额外的一天“2010-08-28 04:00:00.0”。检索时,日期应为2010年8月27日,但即将到来的2010年8月28日您能否建议我为什么要再检索一天。

 import java.util.Date;
 import javax.persistence.Column;
public class Model
{
    @Column(name = "BEGIN_DATE")
private Date startDate;

    public Date getStartDate() {
    return startDate;
}

public void setStartDate(Date startDate) {
    this.startDate = startDate;
}

 }

2 个答案:

答案 0 :(得分:4)

默认情况下,数据库会存储您所在的时区。但是,在重新搜索日期时,它不会添加您所在的时区。该日期显示为GMT。看看使用JodaTime获得更好的Date库。

我会举个例子。您需要JodaTime库和JadiraTypes库来使用Hibernate保存JodaTime日期。

http://mvnrepository.com/artifact/joda-time/joda-time/2.3
http://mvnrepository.com/artifact/org.jadira.usertype/usertype.jodatime/2.0.1

您的代码将如下所示:

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime") private LocalDateTime date;

这会将你的日期保留给Hibernate。

我90%确定JodaTime支持为您添加时区。如果您真的很担心,请将它们存储在数据库中作为时间戳。

如上所述尝试更改为JodaTime,如果您有任何问题,请告诉我。

答案 1 :(得分:0)

我认为只要你在视图和控制器之间玩日期,就应该使用InitBinder。

只需将以下内容放入您的控制器

即可
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    dateFormat.setLenient(false);
    webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}