IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Décalage de date avec spring rest et la librairie jackson


Sujet :

Spring Java

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 59
    Points
    59
    Par défaut Décalage de date avec spring rest et la librairie jackson
    salut

    du côté client, j'ai un datetimepicker
    https://eonasdan.github.io/bootstrap-datetimepicker/

    ce composant est initialisé comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $('#dateNaissance').datetimepicker({
                viewMode: 'years',
                format: 'DD/MM/YYYY',
                allowInputToggle: true
            });
    si l'utilisateur entre via le datetimepicker 28/12/1972

    du côté serveur sur mon dto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
    private Date dateNaissance;
    Lors que je recois la date du côté serveur au lieu d'avoir

    28/12/1972

    j'ai 27/12/1972 19:00:00


    niveau date du côté du browser j'ai

    Sat Jul 25 2015 00:55:42 GMT-0400 (EDT)

    et du côté serveur

    sam. juil. 25 00:56:54 EDT 2015

    le client et le serveur sont sur la même machine.

    Pourquoi une tel différence lors de la réception?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par jean.dufour Voir le message
    Lors que je recois la date du côté serveur au lieu d'avoir

    28/12/1972

    j'ai 27/12/1972 19:00:00
    Dit nous plutot ce que tu as dans dateNaissance.getTime(). La string que tu affiche coté serveur n'est d'aucune utilité car elle dépend de la timezone.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    côté serveur le getTime retourne: 94348800000

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Ce qui correspond au 28 Decembre 1972 00:00 GMT, ça me semble correct.

    Jackson utilise UTC pour la conversion String => date ce qui est raisonnable. Maitenant comme ton PC est configuré sur EST, quand tu l'affiche ça donne EST Eastern Standard Time Dec 27 1972 19:00:00 GMT-5:00, ce qui représente exactement le même moment.

    http://www.epochconverter.com/epoch/...epoch=94348800

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    quand je prends la valeur du serveur et que je l'emène au client, je dois surement faire la conversion avant.... car là

    il m'affiche que 27/12/1972, je n'ai pas les heures

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    tu l'envoie comment au client?

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    Les valeurs du formulaire est pris et envoyé via ajax

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
     <div class="form-group">
         <label for="birthdate" class="col-sm-3 control-label">Date de naissance</label>
         <div class="col-sm-9">
             <div class="input-group date" id="birthdatepicker">
                 <input type="text" id="birthdate" name="birthdate" class="form-control">
                 <span class="input-group-addon">
                     <span class="glyphicon glyphicon-calendar"></span>
                 </span>
             </div>
         </div>
    </div>
     
    $('#birthdatepicker').datetimepicker({
                viewMode: 'years',
                format: 'DD/MM/YYYY',
                allowInputToggle: true
    });
     
     
    var data = transForm.serialize('#contactInformationForm');
    data = JSON.stringify(data);
     
    jQuery.ajax({
                    type: type,
                    url: url,
                    contentType: "application/json",
                    data: data,
                    dataType: 'json',
                    success: function (data, status, jqXHR) {
    }

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    c'est la partie coté serveur de génération de ta string date qu'il faut voir Ta Date est correct, la String que tu génère ne l'est pas donc c'est la génération qui pose problème.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    niveau serveur je n'ai que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
    private Date dateNaissance;
    si 28/12/1972 est rentré du côté du web, on se retrouve sur le serveur à avoir


    1972-12-27 et le gettime retourne 94348800000
    au niveau de la bd c'est 1972-12-27 qui est sauvegardé (field dat)

    et pas trop moyen à partir de là de ravoir la date du début.

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par jean.dufour Voir le message
    si 28/12/1972 est rentré du côté du web, on se retrouve sur le serveur à avoir


    1972-12-27 et le gettime retourne 94348800000
    coté serveur tu as juste 94348800000. "1972-12-27" c'est une String sortant de toString, ça a juste valeur informative et c'est accompagnée tout aussi informativement de la timezone qui a été utilisée.

    Citation Envoyé par jean.dufour Voir le message
    au niveau de la bd c'est 1972-12-27 qui est sauvegardé (field dat)
    Ton problème est donc au niveau de la sauvegarde dans ta DB. l'api java.util.Date est une vrai m*** en java Et si tas utilisé un base mysql t'as la combinaison gagnante pour les cauchemards sur les champs date

    mon conseil: utilise un champs timestamp et prends pour convention de le calibrer sur UTC plutot que de prendre un champ Date.

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2015
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    coté serveur tu as juste 94348800000. "1972-12-27" c'est une String sortant de toString, ça a juste valeur informative et c'est accompagnée tout aussi informativement de la timezone qui a été utilisée.


    Ton problème est donc au niveau de la sauvegarde dans ta DB. l'api java.util.Date est une vrai m*** en java Et si tas utilisé un base mysql t'as la combinaison gagnante pour les cauchemards sur les champs date

    mon conseil: utilise un champs timestamp et prends pour convention de le calibrer sur UTC plutot que de prendre un champ Date.
    en effet j'utilise mysql.

    il me semble que java 8 améliorer un peu les choses, faudrait que je regarde autrement je peut-être regarder si avec joda ça serait mieux.

Discussions similaires

  1. [Web Services] Tutoriel sur le développement des services REST avec Spring 3
    Par regis1512 dans le forum Spring
    Réponses: 0
    Dernier message: 11/02/2015, 13h34
  2. Upload fichier avec service REST AngularJS + Spring MVC
    Par the_finisher dans le forum Spring
    Réponses: 0
    Dernier message: 29/08/2014, 14h27
  3. Requete croisée avec décalage de dates
    Par cdlr27 dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/08/2007, 07h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo