【发布时间】:2017-02-28 03:05:27
【问题描述】:
一种方法如下。
TimeZone.setDefault(TimeZone.getTimeZone("yourTimeZone"));
但是,它会影响整个JVM。有没有一种方法可以在安全的查询基础上执行此操作,并且不会对可能假定特定时区的应用程序或 JVM 的其余部分产生影响?
【问题讨论】:
一种方法如下。
TimeZone.setDefault(TimeZone.getTimeZone("yourTimeZone"));
但是,它会影响整个JVM。有没有一种方法可以在安全的查询基础上执行此操作,并且不会对可能假定特定时区的应用程序或 JVM 的其余部分产生影响?
【问题讨论】:
在设置/获取Timestamp 值时指定您想要的时区。
PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)使用 Calendar 对象,驱动程序可以在考虑自定义时区的情况下计算时间戳。如果未指定 Calendar 对象,则驱动程序使用默认时区,即运行应用程序的虚拟机的时区。
ResultSet.getTimestamp(String columnLabel, Calendar cal)如果底层数据库不存储时区信息,此方法使用给定的日历为时间戳构造适当的毫秒值。
两者都使用日历的时区:
Calendar.getInstance(TimeZone zone)获取使用指定时区和默认语言环境的日历。
Calendar.setTimeZone(TimeZone value)使用给定的时区值设置时区。
【讨论】:
Calendar 对象仅用于时区信息(或至少,这是 JDBC 要求的意图)。