Search code examples
javamysqljdbc

getTimestamp() does timezone converstion twice in MySQL JDBC connector?


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.


Solution

  • With these JDBC URL params it works:

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