2016-11-29 10 views
0

Wann immer ich Abfrage basierend auf dem Datumsfeld Ich bekomme alle Attribute korrekt, aber Datum Feld ist immer aktuelles Datum. Warum ist das so? Ich benutze Java 8 Spring mit MongoRepository Implementierung. In der Sammlung ist es Datumsfeld und in Java-Objekt ist es auch Datum.MongoDB Abfrage nach Datum gibt das aktuelle Datum immer

Ich habe es in LocalDateTime geändert, aber gibt immer noch das aktuelle Datum. Das Ändern in "ZonedDateTime" funktioniert nicht, da Java das DB-Datumsobjekt nicht automatisch in "ZonedDateTime" konvertiert.

Wie kann ich MongoDB mit Datum abfragen, die mir den tatsächlichen Datumswert in der Datenbank und nicht aktuelles Datum zurückgibt.

Java DB Objekt:

@Document(collection = "XXX") 
public class XXX{ 
@Field(value= "ts") 
private Date timestamp; 

MongoDB Dokument:

{ 
"_id" : ObjectId("--------"), 
"ts" : ISODate("2016-11-29T21:22:00.000+0000") 
} 

Repository:

@Query(value = "{'regId': ?0, 'ts': {'$lte': ?1}}") 
Page<T> findAllByRegId(ObjectId regId, Date timeStamp, Pageable pageable); 

Ergebnis erhalte ich:

id= same Id as above 
ts = 2016-11-29T16:22:00.000Z 

ts wird immer im aktuellen Zeitstempel zurückgegeben, aber in DB hat es den Wert 2016-11-29T21: 22.

+1

Können Sie ein Beispiel hinzufügen pls? Einfacher zu folgen – Veeram

+0

Können Sie ein Beispiel für Ihre Abfrage posten? MongoDB speichert Daten im ISODate-Format. – dyouberg

+0

Ich speichere die Daten nicht, ich versuche die Daten zu holen, daher denke ich, dass sie mir das gleiche Datum geben sollten wie in DB, unabhängig von der Zeitzone. – user3334226

Antwort

2

Es ist ein Problem mit dem java util date toString-Darstellung, die den Wert in der lokalen Zeitzone beim Drucken zeigt.

So für Java 8 können Sie sie vom Util-Datum auf lokale Datum Zeit wechseln.

LocalDateTime datetime = LocalDateTime.ofInstant(ts.toInstant(), ZoneId.of("America/New_York"))