getTimestamp() does timezone converstion twice in

2020-06-03 05:08发布

问题:

I have a column of type DATETIME wiht a value of 2012-05-07 19:59:12 in MySQL database. I'm trying to retrieve this value from DB, assuming that it's stored in UTC timezone:

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

It outputs (CEST is my local timezone, which is 2 hours ahead of UTC):

Mon May 07 23:59:12 CEST 2012

Expected value is:

Mon May 07 21:59:12 CEST 2012

I'm using these three params in JDBC URL (Europe/Berlin is the same as CEST):

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

Is it my defect or something should be configured additionally in the JDBC driver? I'm using mysql:mysql-connector-java:5.1.20.

回答1:

With these JDBC URL params it works:

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


标签: java mysql jdbc