我在“欧洲/伦敦”时区有一个数据库服务器,在“欧洲/布鲁塞尔”有一个 Web 服务器。由于现在是夏季时间,我的应用程序服务器有 2 小时的差异。
我创建了一个测试来重现我的问题:
Query q = JPA.em().createNativeQuery("SELECT UNIX_TIMESTAMP(startDateTime) FROM `Event` WHERE `id` =574");
BigInteger unix = (BigInteger) q.getSingleResult();
System.out.println(unix + "000 UNIX_TIMESTAMP to BigInteger");
Query q2 = JPA.em().createNativeQuery("SELECT startDateTime FROM `Event` WHERE `id` =574");
Timestamp o = (Timestamp) q2.getSingleResult();
System.out.println(o.getTime() + " Timestamp");
startDateTime 列被定义为“日期时间”(但与“时间戳”相同的问题)我得到的输出是这样的:
1340291591000 UNIX_TIMESTAMP to BigInteger
1340284391000 Timestamp
读取 java 日期对象会导致时区偏移,我该如何解决?我希望 jdbc 驱动程序仅在 Date 对象中设置它从服务器获取的“unix 时间”值。
(适当的解决方案应该适用于任何时区组合,不仅适用于 GMT 中的 db)