Discrepância de fuso horário no mysql e java

Eu tenho uma consulta no mysql que compara 2 datas como esta

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

a função de conversão retorna o valor da data de criação da coluna no horário dos EUA. quando eu executar essa consulta no navegador de consulta mysql como

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

isso me dá valores corretos, por exemplo

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

Agora, estou configurando isso em java usando PreparedStatement assim

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

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

a última linha imprime toda a consulta e o valor definido é

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

mas isso me dá valores diferentes como este

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

Então, eu suspeitava que fosse problema do TimeZone, eu mudei meu código para

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

mas ainda dá o mesmo resultado errado.

Mais informações: como estou definindo a variável final do Google Agenda

Eu tenho um aplicativo da web que me dá data string "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);

Além disso, por experiência eu tentei com o objeto java.util.Date me dá resultado correto seguinte é o código

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

ATUALIZAÇÃO: - Se eu usar um método obsoleto, a resposta está correta

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

UPDATE 2: - Após a sugestão da primeira resposta eu fiz isso

1) executadoSELECT NOW() no mysql e retornou'2013-04-22 11:56:08'

2) executado

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

saída:Mon Apr 22 11:56:25 IST 2013

significa que ambos os sistemas têm o mesmo fuso horário

questionAnswers(5)

yourAnswerToTheQuestion