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



我正在使用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;
}

阿拉伯数字-

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

我正在使用下面的实体在休眠中存储日期

@Temporal(TemporalType.TIMESTAMP)
@Column(name="LAST_WORKED_ON_DTIME")
private Date LastWorkedOnDtime;
public Date getLastWorkedOnDtime() {
return LastWorkedOnDtime;
}
public void setLastWorkedOnDtime(Date lastWorkedOnDtime) {
LastWorkedOnDtime = lastWorkedOnDtime;
}

如果您使用的是 5.2 起的休眠版本,则不必手动执行此操作

可以使用hibernate.jdbc.time_zone配置属性,如本文中所述。

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

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

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

1-模型(实体类(的更改-将字段作为时间戳类型,

@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 ) ));

最新更新