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
我有一个 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