我正在使用Spring with 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 profiing,这是实际执行的查询,所以我得不到正确的结果:
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?
如果我可以添加任何细节来解决问题,请发表评论。
答案 0 :(得分:0)
尝试使用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实现中,将日期字符串显式地转换为日期类型的原则很常见。
答案 1 :(得分:0)
听起来JDBC驱动程序没有正确检测Mysql的时区设置。您可能需要在连接字符串中指定服务器的时区。尝试添加
serverTimezone=UTC&useTimezone=true
到连接字符串。有关更多信息,请参阅http://cs.wellesley.edu/~cs304/jdbc/connector-j.html#connector-j-reference
上的JDBC文档