Stockage Java 8 LocalDate dans mongoDB
Utilisation de Spring boot 1.5.4.RELEASE
et pilote Mongo 3.4.2
.
Je veux stocker LocalDate
dans mongo DB
, mais je fais face à un problème étrange.
LocalDate startDate = LocalDate.now();
LocalDate endDate = LocalDate.of(2020,12,01);
System.out.println("---- StartDate : ---"+startDate);
System.out.println("-----End Date : ----"+endDate);
repository.save(new Person("Mehraj","Malik", startDate, endDate));
Sortie sur console:
---- Date de début: --- 2017-08-26
----- Date de fin: ---- 2020-12-01
Mais dans MongoDb, il stocke des dates incorrectes.
Voici le json de MongoDb:
"startDate": ISODate ("2017-08-25T18: 30: 00.000Z"),
"endDate": ISODate ("2020-11-30T18: 30: 00.000Z")
De plus, j'ai remarqué que l'heure stockée est également incorrecte selon l'heure indienne.
Quelqu'un peut-il m'aider ici? Pourquoi les dates sont correctes sur la console mais pas dans MongoDB et comment résoudre ce problème.
Le client mongo-Java pour un retourne l'objet date comme instance de Java.util.Date
.
Le problème pourrait être dû au fait que pendant que vous enregistrez la valeur startDate
et endDate
, sa méthode toString()
utiliserait probablement le fuseau horaire par défaut de la JVM pour mettre à jour la valeur.
Le doc ici indique que La spécification BSON officielle fait référence au type de date BSON comme datetime UTC. et cela pourrait être la raison pour laquelle vos attributs LocalDateTime
ont été convertis au fuseau horaire UTC avant d'être enregistrés dans la base de données.
De plus, pour éviter une telle confusion, nous suggérons d'utiliser le type bson timestamp
pour mettre à jour les champs de date.
Dans la version MongoDB Java Driver 3.7: http://mongodb.github.io/mongo-Java-driver/3.7/whats-new/ nous pouvons voir que le pilote prend désormais en charge LocalDate:
JSR-310 Prise en charge Instant, LocalDate et LocalDateTime La prise en charge d'Instant, LocalDate et LocalDateTime a été ajoutée au pilote.