Разница часовых поясов в MySQL и Java

У меня есть запрос в MySQL, который сравнивает 2 даты, как это

convert_tz(updatedDate,'+05:30','-05:00') < ?

функция convert возвращает значение столбца createdate в американском времени. когда я запускаю этот запрос в браузере запросов MySQL, как

convert_tz(updatedDate,'+05:30','-05:00') < '2013-04-14 09:30:00'

это дает мне правильные значения, например

product    count
-------    ------
    A        123
    B        7

Теперь я устанавливаю это в Java, используя PreparedStatement, как это

pst.setTimestamp(1, new java.sql.Timestamp(end.getTimeInMillis()));

                rs=pst.executeQuery();
                System.out.println("=====new Open Tickets Query executed=====");
                System.out.println(pst);

последняя строка печатает весь запрос и набор значений

convert_tz(updatedDate,'+05:30','-05:00') < '2013-04-14 09:30:00'

но это дает мне разные значения, как это

product    count
-------    ------
    A        155
    B        19

Итак, я подозревал, что это проблема TimeZone, я изменил свой код

end.setTimeZone(TimeZone.getTimeZone("America/New York"));
pst.setTimestamp(1, new java.sql.Timestamp(end.getTimeInMillis()));

                rs=pst.executeQuery();
                System.out.println("=====new Open Tickets Query executed=====");
                System.out.println(pst);

но это все равно дает тот же неправильный результат.

Больше информации: как я устанавливаю переменную конца календаря

У меня есть веб-приложение, которое дает мне строку даты "2013-04-14 09:30:00"

            DateFormat df1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                Calendar end=Calendar.getInstance();
                end.setTime(df1.parse(endString));
                end.set(Calendar.HOUR, 9);
                end.set(Calendar.MINUTE, 30);
                end.set(Calendar.SECOND, 0);

Кроме того, для эксперимента, который я пробовал с объектом java.util.Date, он дает мне правильный результат, следующий код

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
end.setTime(sdf.parse("2012-10-01 00:00:00"));
pst.setTimestamp(1, new java.sql.Timestamp(end.getTime()));

ОБНОВИТЬ :- Если я использую устаревший метод, ответ правильный

 pst.setTimestamp(1, new java.sql.Timestamp(octDate.get(Calendar.YEAR)-1900,octDate.get(Calendar.MONTH),octDate.get(Calendar.DATE),octDate.get(Calendar.HOUR),octDate.get(Calendar.MINUTE),octDate.get(Calendar.SECOND),0));
pst.setTimestamp(2, new java.sql.Timestamp(end.get(Calendar.YEAR)-1900,end.get(Calendar.MONTH),end.get(Calendar.DATE),end.get(Calendar.HOUR),end.get(Calendar.MINUTE),end.get(Calendar.SECOND),0));

ОБНОВЛЕНИЕ 2: - После предложения первого ответа я сделал это

1) выполненоSELECT NOW() в MySQL и он вернулся'2013-04-22 11:56:08'

2) выполнено

System.out.println(new Date(System.currentTimeMillis()));

выход :Mon Apr 22 11:56:25 IST 2013

означает, что обе системы имеют одинаковый часовой пояс

Ответы на вопрос(5)

Ваш ответ на вопрос