gpt4 book ai didi

java - 不同时区的数据库服务器的 MySQL JDBC 日期问题

转载 作者:行者123 更新时间:2023-11-29 06:59:02 25 4
gpt4 key购买 nike

我在“欧洲/伦敦”时区有一个数据库服务器,在“欧洲/布鲁塞尔”有我的网络服务器。由于现在是夏季时间,我的应用程序服务器有 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 时间”值。

(正确的解决方案应该适用于任何时区组合,不仅适用于格林威治标准时间的数据库)

最佳答案

我能够通过连接字符串参数解决这个问题

useJDBCCompliantTimezoneShift=true&useSSPSCompatibleTimezoneShift=true

但我对此不是 100% 满意,因为当数据库不在 UTC/GMT 时区时,它会导致更多麻烦。

关于java - 不同时区的数据库服务器的 MySQL JDBC 日期问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com