【问题标题】:How do I set JDBC's timezone on a query basis?如何根据查询设置 JDBC 的时区?
【发布时间】:2017-02-28 03:05:27
【问题描述】:

一种方法如下。

TimeZone.setDefault(TimeZone.getTimeZone("yourTimeZone"));

但是,它会影响整个JVM。有没有一种方法可以在安全的查询基础上执行此操作,并且不会对可能假定特定时区的应用程序或 JVM 的其余部分产生影响?

【问题讨论】:

标签: java jdbc timezone


【解决方案1】:

在设置/获取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 要求的意图)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 2019-10-23
  • 1970-01-01
  • 2013-09-05
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多