Mam kolumnę typu DATETIME
o wartości 2012-05-07 19:59:12
w bazie danych MySQL. Próbuję pobrać tę wartość z DB, zakładając, że jest przechowywany w UTC Strefa czasowa:getTimestamp() czy konwersja timezone dwa razy w łączniku JDBC MySQL?
Calendar cal = Calendar.getInstance(new SimpleTimeZone(0, "UTC"));
Date date = resultSet.getTimestamp(1, cal);
System.out.println(date);
wyprowadza (CEST
jest moja lokalna strefa czasowa, która wynosi 2 godziny przed UTC):
Mon May 07 23:59:12 CEST 2012
Oczekiwana wartość:
Mon May 07 21:59:12 CEST 2012
Używam tych trzech params w JDBC URL (Europe/Berlin
jest taka sama jak CEST
):
..&useGmtMillisForDatetimes=true&useTimezone=true&serverTimezone=Europe/Berlin
Czy to moja wada lub coś należy skonfigurować dodatkowo w sterowniku JDBC? Używam mysql:mysql-connector-java:5.1.20
.
myślę, że robisz to nieco bardziej skomplikowane niż to musi być. JDBC obsługuje pobieranie znacznika czasu z kalendarzem, gdy baza danych nie obsługuje stref czasowych. MySQL działa, więc nie jest to konieczne. Możesz (prawdopodobnie) zapomnieć również o wszystkich niestandardowych ustawieniach adresu URL jdbc. Wystarczy użyć getDate(), a otrzymasz java.util.Date, która jest niezależna od strefy czasowej, dopóki nie sformatujesz jej z określoną strefą czasową. – GreyBeardedGeek
Tak to działa: '& useGmtMillisForDatetimes = true & useJDBCCompliantTimezoneShift = true i useLegacyDatetimeCode = false i useTimezone = true & serverTimezone = UTC', ale dzięki za twoją sugestię spróbuję. – yegor256