TimeZone-Diskrepanz in MySQL und Java

Ich habe eine Abfrage in MySQL, die 2 Daten wie folgt vergleicht

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

Die Konvertierungsfunktion gibt den Wert der Spalte "Erstellungsdatum" in US-Zeit zurück. wenn ich diese Abfrage im MySQL-Abfrage-Browser ausführen möchte

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

es gibt mir zum Beispiel korrekte Werte

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

Jetzt setze ich dies in Java mit PreparedStatement wie folgt

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

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

Die letzte Zeile gibt die gesamte Abfrage aus, und der festgelegte Wert lautet

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

Aber es gibt mir andere Werte wie diesen

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

Daher habe ich vermutet, dass es sich um ein TimeZone-Problem handelt, zu dem ich meinen Code geändert habe

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

aber es gibt immer noch das gleiche falsche Ergebnis.

Weitere Informationen: Wie ich die Endvariable des Kalenders einstelle

Ich habe eine Webanwendung, die mir den Datumsstring "2013-04-14 09:30:00" gibt.

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

Auch für Experimente, die ich mit java.util.Date versucht habe, gibt es mir das richtige Ergebnis. Das Folgende ist der Code

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

UPDATE: - Wenn ich eine veraltete Methode verwende, ist die Antwort korrekt

 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: - Nach dem Vorschlag der ersten Antwort habe ich dies getan

1) ausgeführtSELECT NOW() in MySQL und es kehrte zurück'2013-04-22 11:56:08'

2) ausgeführt

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

Ausgabe :Mon Apr 22 11:56:25 IST 2013

bedeutet, dass beide Systeme dieselbe Zeitzone haben

Antworten auf die Frage(5)

Ihre Antwort auf die Frage