JPA 日期在 Weblogic 服务器上 运行 时输出错误 date/time,但在 运行 本地嵌入 Tomcat 时正确显示

JPA Date is output to wrong date/time when running on Weblogic server, but displays correctly when running locally embedded Tomcat

我有一个 spring 引导应用程序使用 spring 数据从 Oracle 数据库检索数据。当我 运行 代码本地嵌入 Tomcat 时,日期显示正确。但是,将相同的代码部署到 Weblogic 服务器时会给出完全不同的 date/time 结果。我已确认 Weblogic 服务器上的时区与我本地的时区相同 (US/Eastern)。

奇怪的是,分钟被去掉了,总是设置为00,而且正确日期和显示日期之间的时差是不可预测的(一个例子晚了16小时,另一个例子, 是 19 小时)

jpa 映射:

import java.util.Date;
...
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "INITIAL_CREATE_DATE")
private Date initialCreateDate;

控制器日志语句:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm z");
...  
log.info("~~create date: " + medley.getInitialCreateDate() + " sdf " + sdf.format(medley.getInitialCreateDate()));

Weblogic 的输出(错误):

~~create date: Thu Oct 26 20:00:00 EDT 2017 sdf 10/26/2017 08:00 EDT 

本地Tomcat和spring数据单元测试的输出(正确):

~~create date: 2017-10-27 11:57:53.0 sdf 10/27/2017 11:57 EDT 

有两件事让我印象深刻(除了 date/time 是完全错误的) 1.时间少了分 2. date

的 .toString() 输出格式不同

非常感谢任何可以进一步解决此问题的帮助或想法!

我解决了我的问题 - 发布我的答案,也许它会对其他人有所帮助。

我的 "medley" 对象不是直接从数据库中检索到的。它是由一个作业检索的,然后将这个混合对象作为 JSON 发布到这里输出日期的方法。虽然我仍然不理解奇怪的 date/time 行为,但至少现在我知道了解决方法。

我以前的代码版本使用的是@Temporal(TemporalType.DATE) 并将 json 序列化为...

"initialCreateDate": "2017-10-27",

我不明白为什么要将其转换为 10 月 26 日星期四 20:00:00 - 但至少我知道在我的工作中应用 @Temporal(TemporalType.TIMESTAMP) 解决了这个问题。 (即将 pom.xml 中的存储库代码版本更新为服务使用的相同版本)

这是 date/time 的正确序列化:

"initialCreateDate":1509119873000