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

Collection et Stream Java Discussion :

gettime 2 résultats différents pour une meme date


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Points : 173
    Points
    173
    Par défaut gettime 2 résultats différents pour une meme date
    Bonjour bonjour,
    J'ai un soucis que je n'arrive pas a expliquer.
    J'ai developper une application sur mon poste, l'application fonctionne mais sur les autres postes elle plante...
    Apres quelque recherche j'ai trouvé la source :

    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
     
     public int getEcart(String sDateA, String sDateB, String sFormat) throws
                Exception {
            Date date1 = new Date();
            Date date2 = new Date();
            if (this.stringToDate(sDateA,
                                  sFormat).before(this.stringToDate(sDateB, sFormat))) {
                date1 = this.stringToDate(sDateA, sFormat);
                date2 = this.stringToDate(sDateB, sFormat);
            } else {
                date1 = this.stringToDate(sDateB, sFormat);
                date2 = this.stringToDate(sDateA, sFormat);
            }
            Long time1 = date1.getTime(); 
            Long time2 = date2.getTime(); //source du problème
            Long timeEcart = time2 - time1;
            int ecart = Math.abs((int) (timeEcart / 86400000) - 1);
            System.out.println("time2-time1=timeEcart soit x jour "+time2+"-"+time1+"="+timeEcart+" soit "+ecart+" jours");
            return ecart;
     
        }
    Sur mon poste j'obtiens le resultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Date1 18/02/2007  Date2 31/03/2007
    time2-time1=timeEcart soit x jour 1175295600000-1171753200000=3542400000 soit 40 jours
    nbJ= 40
    42
    Sur le poste de mon collègue j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    18/02/2007  31/03/2007
    time2-time1=timeEcart soit x jour 1175292000000-1171753200000=3528800000 soit 39 jours
    nbJ= 39
    41


    Voilà, si l'un d'entre vous a une petite idée, qu'il n'hésite pas.... moi je suis totalement à court d'idée.
    Merci beaucoup

    Kro

    Le développement est un art capilotracté
    .____________________________________
    | SGBDR : Oracle 8
    | PHP Version 5.0.4
    | SERVEUR Apache 2.0 hébergé par Linux (Fédora)
    | C++ sous visual studio 6
    | JAVA sous JBuilder2006 Entreprise
    |____________________________________

  2. #2
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    hummm, juste avec ta fonction getecart on ne verra peut-etre pas grand chose. Il faudrait que tu nous fournisse le code de la génération des dates à la methode getEcart.

    Et surtout ta methode StringToDate et le format que tu utilises.
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  3. #3
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Perso j'ai fait les methodes comme je pensais et j'obtient 39!
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  4. #4
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Sur ton pc, le getTime que tu obtiens n'est pas le getTime du 31/03/2007 mais le getTime du 31/03/2007 01:00:00 (donc vérifie que tu es sur le bon GMT sur ton pc).
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    L'origine du problème se situe au niveau des fuseaux horaires, et des heures d'été et d'hiver...

    Je suppose que tu ne dois pas préciser de fuseau horaire lorsque tu convertis la String en Date, et du coup cela dépend du système.

    Ainsi dans mon cas avec le fuseau horaire "Europe/Paris", j'obtiens ceci :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    18/02/2007 => 18/02/2007 00:00:00 CET (heure d'hiver)
    31/03/2007 => 31/03/2007 00:00:00 CEST (heure d'été)
    Or lorsque tu convertis ces date en heure GMT tu "perds" une heure ou deux heure à cause du changement d'heure :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    18/02/2007 00:00:00 CET  => 17/02/2007 23:00:00 GMT
    31/03/2007 00:00:00 CEST => 30/03/2007 22:00:00 GMT
    Du coups en GMT tu te retrouves avec une différence de 39 jours et 23 heures au lieu de 40 jours tout rond...


    Pour calculer une différence entre deux dates il vaut mieux utiliser le fuseau GMT pour éviter ces petits soucis. Tu peux faire cela via la méthode setTimeZone() de ton DateFormat lors de la conversion String->Date...


    Sinon tu peux également te tourner vers Joda-time, une API pour gérer les dates/heures/durée bien plus complète que celle en standard (et qui est pris pour base afin d'être intégré dans la prochaine version de Java).


    a++

  6. #6
    Membre habitué Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Points : 173
    Points
    173
    Par défaut
    Ah le maudit bug des heures été/hiver, je ne l'avait pas vu venir celui là!
    Merci pour vos lumières en tout cas, je vais aller jouer avec les timezone
    Merci beaucoup

    Le développement est un art capilotracté
    .____________________________________
    | SGBDR : Oracle 8
    | PHP Version 5.0.4
    | SERVEUR Apache 2.0 hébergé par Linux (Fédora)
    | C++ sous visual studio 6
    | JAVA sous JBuilder2006 Entreprise
    |____________________________________

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultats géocodage inverse différents pour une même localisation
    Par philippe g dans le forum IGN API Géoportail
    Réponses: 13
    Dernier message: 05/05/2015, 16h57
  2. [WebI Xi] Créer des rapports pour dates différentes pour une même requête
    Par MorningMemories dans le forum Débuter
    Réponses: 2
    Dernier message: 22/03/2012, 16h59
  3. Compter le nombre d'article différent pour une date X
    Par Raphael1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/02/2012, 10h32
  4. Réponses: 19
    Dernier message: 26/08/2009, 10h16
  5. Résultats différent entre une requête SQL, et la même en VBA
    Par thetaps dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/09/2005, 12h05

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