java - 使用 JPA Hibernate 在 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;
}
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;
}
解决方案
如果您从 5.2 开始使用休眠版本,则不必手动执行此操作
您可以使用hibernate.jdbc.time_zone
配置属性,如本文所述。
基本上,您现在可以使用以下配置属性为所有列TIMESTAMP
强制使用 UTC 时区:TIME
<property name="hibernate.jdbc.time_zone" value="UTC"/>
推荐阅读
- html - 容器流体类采取额外的高度
- php - 函数 getDoctrine 不能在控制器的一个特定函数中工作
- unix - 使用 Sed 替换模式删除字符串
- javascript - 'npm ls' 显示模块,但 require() 找不到它
- php - 使用 LEFT JOIN 时如何避免列名冲突
- mysql - 删除 MySQL 选择
- sql-server - CSV 文件格式更改
- javascript - 在页面标题中使用particle.js,无法使用css达到所需的大小
- sql-server - 为创建和更新的日期列设置默认值是一种好习惯吗?
- continuous-integration - Go CD 失败消息在环境中可用