【发布时间】:2012-02-21 19:15:58
【问题描述】:
我正在尝试从 Java 中查询一个 mysql DATETIME。我知道服务器的时区,但我无法按照我的预期将日期时间与时区拉出。
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() 不会处理任何时区转换。
【问题讨论】:
-
您知道
Date.getTime()始终显示在格林威治标准时间吗? -
ResultSet.getTime() 还是 Date.getTime()?我知道 Date.getTime() 被拉到 UTC。
-
@user833970 好吧,正如 Jon Skeet 指出的那样,如果数据库不存储时区信息,ResultSet.getTime() 实际上会考虑时区(根据文档)。我的猜测是您的数据库确实存储了所述信息,因为显然它没有在您的示例中考虑日历:/
-
那么为什么要在 ResultSet.getDate() 中考虑日历呢?我认为这可能是连接器的错误(我使用的是 mysql-connector-java-5.1.18-bin.jar)。
-
我可怕的最终解决方案是更改系统时区以匹配 mysql 服务器时区。上帝怜悯我们所有人。