2016-03-29 8 views
0

Ich erhalte einige Daten aus meiner Parse-Datenbank. Das Problem ist, dass eines der abgerufenen Daten aus der Datenbank ein falsches Datum zurückgibt. In diesem Fall, wenn ich das Datum 01/10/2016 abrufe, gibt es stattdessen 02/10/2016 zurück! Die anderen Daten geben jedoch das korrekte Datum (in diesem Fall die zwei anderen Daten im Protokoll (07/02/2016 und 21/02/2016).Javas getDate gibt das falsche Datum zurück

Was aus einem seltsamen Grund ist verantwortlich für die Rückkehr falsche Datum nur an diesem einen Tag, während es das richtige Datum an jedem anderen ?!

(Liste ist eine Liste für die parseObjects auf meiner Datenbank, die Daten enthalten) Rück

Date[] surveyDate = new Date[list.size()]; 
for(int i = 0; i<list.size(); i++){ 
    surveyDate[i] = list.get(i).getDate("day"); 
    System.out.println("surveyDate: " +surveyDate[i].getDate() + ", " + (surveyDate[i].getMonth()+1) + ", " + (surveyDate[i].getYear()+1900)); 
} 

Log

I/System.out: surveyDate: date: 7, month: 2, 2016 
I/System.out: surveyDate: date: 21, month: 2, 2016 
I/System.out: surveyDate: date: 2, month: 10, 2016 

Hier habe ich ein Bild von meinen Daten in der Datenbank, und Sie können sehen, dass nur der letzte (1. Oktober) mit falschem Wert zurückgegeben wird.

By the way, nicht über die anderen Termine Sorge im Bild gezeigt, sie geordnet und sortiert in der Liste aus.

Termine auf Datenbank

enter image description here

+0

Sie zeigen nicht, wie Sie die Liste erhalten (oder manipulieren). Es gibt Daten in Ihrem DB-Bild, die nicht in Ihrem Protokoll enthalten sind, fragen Sie sich nicht darüber? – Stultuske

+0

Entschuldigung, ich habe das nicht erwähnt. Die Liste ist geordnet und sortiert. Die Listengröße ist 3 und enthält die 3 Daten, die protokolliert werden. Ich werde meinen Beitrag bearbeiten, um das klarer zu machen –

+0

Haben Sie versucht, stattdessen die Klasse 'Calendar' zu verwenden? Diese Methoden sind alle veraltet. Wenn Sie der Meinung sind, dass sie funktionieren sollten, haben Sie dann versucht, ein Datum in den lokalen Datenspeicher einzufügen und es sofort abzurufen? Ich bezweifle stark das Problem ist die Java-getDate-Funktion. –

Antwort

0

Es wird wahrscheinlich zu Zeitzonen zusammen. Überprüfen Sie die Zeitzonen Ihres Datenbankservers und des Servers, der den Datensatz abruft, sie können sich unterscheiden.

ist eine gute Praxis immer Datetime zu verwenden, um Verwechslungen zu vermeiden.

2

Überprüfen Sie die Zeitzone. Das Datum 1/10/2016 im DB ist kurz vor Mitternacht.

Vielleicht abrufen Sie jene Daten in GMT und aplying die JVM Zeitzone.

Es würde helfen, wenn Sie die Zeit auch auf der Konsole drucken.

+0

Oh, natürlich hätte ich sofort darüber nachdenken sollen! Nun, danke für das Feedback, ich habe es jetzt behoben, mein Gerät abrufen ist ein paar Stunden vor der Datenbank ... –

+0

Perfekt, Geist gefangen! Ich würde Ihre Stimme in der Antwort schätzen ;-) – jbernach

+0

@SteinarSeim Um diese Art von Überblick zu vermeiden, trainieren Sie sich als Programmierer, um in Begriffen wie "Datum-Zeit", "Nur-Datum" und "Nur-Zeit" zu denken. . Datum-Zeit-Arbeit ist kniffeliges Zeug, noch mehr, wenn sich Java, JDBC, SQL und Datenbank schneiden. Ein bewussteres Verständnis der beteiligten Datentypen wird helfen. –