Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

mysql

jdbc

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.

like image 228
yegor256 Avatar asked May 07 '12 20:05

yegor256


1 Answers

With these JDBC URL params it works:

useGmtMillisForDatetimes=true
useJDBCCompliantTimezoneShift=true
useLegacyDate‌timeCode=false
useTimezone=true
serverTimezone=UTC
like image 78
yegor256 Avatar answered Oct 13 '22 18:10

yegor256