java - getTimestamp() 在 MySQL JDBC 连接器中进行两次时区转换?

标签 java mysql jdbc

我在 MySQL 数据库中有一个 DATETIME 类型的列,其值为 2012-05-07 19:59:12。我正在尝试从数据库中检索此值,假设它存储在 UTC 时区中:

Calendar cal = Calendar.getInstance(new SimpleTimeZone(0, "UTC"));
Date date = resultSet.getTimestamp(1, cal);
System.out.println(date);

它输出(CEST 是我本地的时区,比 UTC 早 2 小时):

Mon May 07 23:59:12 CEST 2012

期望值为:

Mon May 07 21:59:12 CEST 2012

我在 JDBC URL 中使用这三个参数(Europe/BerlinCEST 相同):

..&useGmtMillisForDatetimes=true&useTimezone=true&serverTimezone=Europe/Berlin

是我的缺陷还是应该在JDBC驱动中额外配置什么?我正在使用 mysql:mysql-connector-java:5.1.20

最佳答案

有了这些JDBC URL params它有效:

useGmtMillisForDatetimes=true
useJDBCCompliantTimezoneShift=true
useLegacyDate‌timeCode=false
useTimezone=true
serverTimezone=UTC

关于java - getTimestamp() 在 MySQL JDBC 连接器中进行两次时区转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10488529/

相关文章:

java - ModelAndView 找不到 URL

java - 表达式的类型必须是数组类型,但它解析为 int - 与有效的数组语法相同吗?

MySQL 选择类别和子类别(如果有产品)

php - 获取cake 3 php中2个日期之间的数据结果

mysql - 删除 MySQL 中的一系列行--不起作用

java - 运行 sqlite 语句时 JRE 崩溃

java - 有谁知道 Java Comparators 库?

java - "java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached"如果程序由 cron 启动

java - 修剪从 java 中的 ResultSet .getDouble() 检索的指数类型的值

java - 使用 DBunit 导出数据库时出错 "java.lang.NoClassDefFoundError: org/dbunit/database/IDatabaseConnection"