我将 Spring 与 apache commons BasicDataSource 结合使用。
时区显示为 GMT:
SELECT @@global.time_zone, @@session.time_zone;
我的输入是纪元时间,1386831420000和1386833220000,所以查询应该是这样的:
SELECT * FROM table WHERE AND arrival_time BETWEEN '2013-12-12 06:57:00' AND '2013-12-12 07:27:00';
我启用了 SQL 分析,这是实际执行的查询,所以我没有得到正确的结果:
SELECT * FROM table WHERE AND arrival_time BETWEEN '2013-12-12 01:57:00' AND '2013-12-12 02:27:00';
请注意,时间相差 5 小时,因为我是 EST-5,时间应该是 GMT。
我的问题是:如何告诉 MySQL 或 Spring JDBC 不要使用客户端时区,而始终使用 GMT?
如果我可以添加任何细节来解决问题,请发表评论。
最佳答案
尝试使用TO_DATE
(或实现特定的日期转换器函数)将日期字符串显式转换为日期类型
SELECT *
FROM table
WHERE arrival_time BETWEEN
TO_DATE('2013-12-12 06:57:00', 'YYYY-MM-DD HH24:MI:SS')
AND
TO_DATE('2013-12-12 07:27:00', 'YYYY-MM-DD HH24:MI:SS')
上面的示例是在 Oracle SQL 中,但将日期字符串显式转换为日期类型的原则在整个 SQL 实现中很常见。
关于java - JDBC SQL 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459214/