Rozbieżność stref czasowych w mysql i java

Mam zapytanie w mysql, które porównuje 2 daty w ten sposób

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

funkcja konwersji zwraca wartość kolumny createddate w US Time. kiedy uruchomię to zapytanie w przeglądarce zapytań mysql, jak

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

daje mi na przykład prawidłowe wartości

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

Teraz ustawiam to w java używając PreparedStatement w ten sposób

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

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

ostatnia linia wypisuje całe zapytanie, a ustawiona wartość to

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

ale daje mi to różne wartości

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

Podejrzewałem, że to problem ze strefą czasową. Zmieniłem kod na

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);

ale nadal daje ten sam zły wynik.

Więcej informacji: Jak ustawiam zmienną zakończenia kalendarza

Mam aplikację internetową, która daje mi ciąg daty „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);

Również w przypadku eksperymentu próbowałem z obiektem java.util.Date daje mi poprawny wynik następujący po kodzie

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()));

AKTUALIZACJA :- Jeśli użyję przestarzałej metody, odpowiedź jest poprawna

 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));

AKTUALIZACJA 2: - Po sugestii pierwszej odpowiedzi zrobiłem to

1) wykonaneSELECT NOW() w mysql i wrócił'2013-04-22 11:56:08'

2) wykonane

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

wyjście:Mon Apr 22 11:56:25 IST 2013

oznacza, że ​​oba systemy mają tę samą strefę czasową

questionAnswers(5)

yourAnswerToTheQuestion