Ich habe eine Abfrage in MySQL, die wie dieser 2 Tage, vergleichtTime-Zone Diskrepanz in MySQL und Java
convert_tz(updatedDate,'+05:30','-05:00') < ?
die Konvertierungsfunktion den Wert der Spalte CreatedDate in US-Zeit zurück. wenn ich diese Abfrage in MySQL Query Browser laufen wie
convert_tz(updatedDate,'+05:30','-05:00') < '2013-04-14 09:30:00'
gibt es mir korrekte Werte zum Beispiel
product count
------- ------
A 123
B 7
Nun, ich dies in Java setze mit PreparedStatement wie diese
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 eingestellte Wert ist
convert_tz(updatedDate,'+05:30','-05:00') < '2013-04-14 09:30:00'
aber es gibt mir verschiedene Werte wie diese
product count
------- ------
A 155
B 19
Also, vermutete ich, dass es Time-Zone Problem ist, ich meinen Code
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);
zu
geändert, aber es gibt immer noch gleiche falsche Ergebnis.Mehr Info: Wie Ich gründe Kalender endet Variable
Ich habe eine Web-Anwendung, die mir Datum string "2013.04.14 09.30.00" Auch
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);
gibt , für Experiment I mit java.util.Date versucht Objekt, das es mir richtiges Ergebnis gibt den Code wird wie folgt
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 verwenden, die Antwort ist richtig
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, die ich tat dies
1) SELECT NOW()
in mysql ausgeführt und es kehrte '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 gleiche Zeitzone
MySQL Zeitzoneninformationen hat keinen Einfluss auf Ihr Problem , da MySQL nicht die Aufgabe übernimmt, das Datum zu analysieren. Siehe meine Antwort. –