2012-02-21 3 views
0

Я пытаюсь запросить mysql DATETIME с Java. Я знаю часовой пояс сервера, но я не могу вытащить datetime с часовым поясом, как я ожидал.Запросить mysql DATETIME с заданным часовым поясом в Java

ResultSet rs = st.executeQuery(...); 

Date d1=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("UTC"))); 
Date d2=rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone("PST"))); 

System.out.println("d1: "+d1.getTime()); 
System.out.println("d2: "+d2.getTime()); 

Это оставляет меня:

d1: 40258000 
d2: 40258000 

я упускаю что-то основной здесь?

ResultSet.getDate() учитывает Календар. Но я не могу использовать его, потому что он обрезает информацию о времени. По-прежнему странно, ResultSet.getTime() не будет обрабатывать любые изменения в часовом поясе.

+0

Знаете ли вы, что 'Date.getTime()' всегда отображается в GMT? –

+0

ResultSet.getTime() или Date.getTime()? Я знаю, что Date.getTime() загружается в UTC. – user833970

+0

@ user833970 Ну, как указал Джон Скит, ResultSet.getTime() действительно учитывает часовой пояс (согласно документам), если база данных не хранит информацию о часовом поясе. Я предполагаю, что ваша база данных хранит указанную информацию, потому что, очевидно, она не учитывала календарь в вашем примере:/ – Tim

ответ

0

В documentation состояния:

Этот метод использует данный календарь построить соответствующее значение миллисекунды в течение времени, если основная база данных не хранит информацию часовой пояс.

Возможно, база данных делает информацию о часовом поясе в этом случае?

Как выглядит ваша ценность в базе данных и что она должна представлять?

-1

getTime в классе Date возвращает время эпохи в соответствии с http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html , поэтому оно будет корректировать ваш часовой пояс. Я думаю, что страница предполагает, что вы должны использовать календарь с часовым поясом, чтобы получить свое местное время.

0

Альтернативный подход был бы позволить серверу MySQL преобразовать часовой пояс:

SELECT CONVERT_TZ(timefield,'PST','UTC') AS tf 

, например, будет преобразовывать значение DATETIME в поле timefield от PST времени UTC (и затем возвращение его в качестве tf).

Смежные вопросы