在Java中查询具有给定时区的mysql DATETIME

在Java中查询具有给定时区的mysql DATETIME,java,mysql,date,Java,Mysql,Date,我正在尝试从Java查询mysql日期时间。我知道服务器的时区,但我不能像预期的那样将日期时间与时区一起拉出 ResultSet rs = st.executeQuery(...); Date d1=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("UTC"))); Date d2=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("PST"))); System.o

我正在尝试从Java查询mysql日期时间。我知道服务器的时区,但我不能像预期的那样将日期时间与时区一起拉出

ResultSet rs = st.executeQuery(...);

Date d1=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("UTC")));
Date d2=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("PST")));

System.out.println("d1: "+d1.getTime());
System.out.println("d2: "+d2.getTime());
这给我留下了:

d1: 40258000
d2: 40258000
我是不是错过了一些基本的东西

ResultSet.getDate不考虑日历。但是我不能使用它,因为它会截断时间信息。ResultSet.getTime无法处理任何时区转换,这仍然很奇怪。

状态:

如果基础数据库不存储时区信息,此方法使用给定的日历为时间构造适当的毫秒值

那么,在这种情况下,数据库是否存储了时区信息


数据库中的值是什么样子的?它应该代表什么?

getTime on the Date类根据
所以它会调整你的时区。我认为该页面暗示您应该使用时区调整日历来获取本地时间。

另一种方法是让MySQL服务器转换时区:

SELECT CONVERT_TZ(timefield,'PST','UTC') AS tf

例如,将时间字段中的DATETIME值从PST转换为UTC时间,然后将其作为tf返回。

您是否知道Date.getTime始终显示在GMT?ResultSet.getTime或Date.getTime?我知道Date.getTime是UTC的。@user833970正如Jon Skeet指出的那样,如果数据库不存储时区信息,ResultSet.getTime实际上会根据文档考虑时区。我的猜测是,您的数据库确实存储了上述信息,因为在您的示例中,它显然没有考虑日历:/n那么,为什么它会在ResultSet.getDate上考虑日历呢?我想这可能是我使用的连接器mysql-connector-java-5.1.18-bin.jar的一个bug。我可怕的最终解决方案是将系统时区更改为mysql服务器时区。上帝怜悯我们所有人。