使用JPA Hibernate在Oracle DB中插入UTC日期

问题描述 投票:1回答:2

我正在使用ServiceMix上的JPA开发RESTful Web服务。

我必须在Oracle DB中以UTC格式存储日期时间戳。我能够在控制台上使用各种解决方案转换UTC日期,但日期仅存储在本地时区。

我在下面使用了两个正确打印日期但在Oracle数据库中插入本地时间而不是UTC的解决方案。

1-

public static Date utcDate()
{
    Date dt = new Date();
    Date utcDate=null;
    //Try to format your date with the Z or z timezone flags
    SimpleDateFormat dateFormatter = new SimpleDateFormat("MMM/dd/yyyy 
HH:mm:ss a Z");
    String strUTCDate = dateFormatter.format(dt);
    System.out.println("UTC Sting - "+strUTCDate);
    try{
        utcDate=dateFormatter.parse(strUTCDate);
    }catch(ParseException ex){System.out.println("Exception while parsing String date to Date Object.");}
    System.out.println("UTC Date Obj - "+utcDate);
    System.out.println("System Date - "+dt);
return utcDate;
}

2-

Timestamp.from(LocalDateTime.now().toInstant( ZoneOffset.UTC ) )

我使用下面的实体在hibernate中存储日期

@Temporal(TemporalType.TIMESTAMP)
@Column(name="LAST_WORKED_ON_DTIME")
private Date LastWorkedOnDtime;
 public Date getLastWorkedOnDtime() {
    return LastWorkedOnDtime;
}
public void setLastWorkedOnDtime(Date lastWorkedOnDtime) {
    LastWorkedOnDtime = lastWorkedOnDtime;
}
java oracle hibernate jpa utc
2个回答
0
投票

如果从5.2开始使用hibernate版本,则不必手动执行此操作

您可以使用hibernate.jdbc.time_zone配置属性,如this article中所述。

基本上,您现在可以使用以下配置属性强制所有TIMESTAMPTIME列的UTC时区:

<property name="hibernate.jdbc.time_zone" value="UTC"/>

0
投票

问题已解决。下面是对现有代码所做的更改。

1-模型中的更改(实体类) - 将字段作为TIMESTAMP类型,

@Column(name="LAST_WORKED_ON_DTIME")
private Timestamp LastWorkedOnDtime;

public Timestamp getLastWorkedOnDtime() {
    return LastWorkedOnDtime;
}
public void setLastWorkedOnDtime(Timestamp lastWorkedOnDtime) {
    LastWorkedOnDtime = lastWorkedOnDtime;
}

2-持久前设置字段值。

sdheaders.setLastWorkedOnDtime(Timestamp.from(LocalDateTime.now().toInstant( ZoneOffset.UTC ) ));
© www.soinside.com 2019 - 2024. All rights reserved.