我正在在Servicemix上使用JPA开发RESTful Web服务。
我必须以UTC格式在Oracle DB中存储日期时间戳。我可以使用控制台上的各种解决方案以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 ) )
我正在使用以下实体将日期存储在休眠状态
@Temporal(TemporalType.TIMESTAMP)
@Column(name="LAST_WORKED_ON_DTIME")
private Date LastWorkedOnDtime;
public Date getLastWorkedOnDtime() {
return LastWorkedOnDtime;
}
public void setLastWorkedOnDtime(Date lastWorkedOnDtime) {
LastWorkedOnDtime = lastWorkedOnDtime;
}
答案 0 :(得分:0)
如果您使用的是5.2以后的休眠版本,则不必手动执行此操作
您可以使用hibernate.jdbc.time_zone
配置属性,如this article中所述。
基本上,您现在可以使用以下配置属性为所有TIMESTAMP
和TIME
列强制采用UTC时区:
<property name="hibernate.jdbc.time_zone" value="UTC"/>