2012-05-07 12 views
7

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.

+0

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

+0

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

Odpowiedz

12

Z tych JDBC URL params to działa:

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

Świetna odpowiedź, zadziałała idealnie dla mnie. Uwaga: masz dwa (niewidoczne) znaki 0x00 pomiędzy "useLegacy" i "DatetimeCode", co oznacza, że ​​funkcja WONT działa, gdy ktoś skopiuje - wklei ją do pliku właściwości. Zrobiłem to i ciężko było wyśledzić. Na wszelki wypadek, jeśli ktoś inny to spróbuje. – choobablue

+0

Naprawiłem tekst, dzięki – yegor256

+0

wciąż były niewidzialne postacie ... teraz naprawione !! –

Powiązane problemy