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

API standards et tierces Java Discussion :

Joda Time (générale + question sur les périodes)


Sujet :

API standards et tierces Java

  1. #1
    Membre actif Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Points : 272
    Points
    272
    Par défaut Joda Time (générale + question sur les périodes)
    Bonjour à tous,

    Je cherche à savoir si beaucoup de monde utilise joda time. Est ce que ceux qui l'utilise rencontre des problèmes ?

    Concernant l'utilisation des période dans Joda Time voici quelques exemples avec des résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
           DateTime dtDateEff = new DateTime(1989, 7, 25, 0, 0, 0, 0);
            DateTime dtDateEch = new DateTime(1994, 7, 18, 0, 0, 0, 0);
            Period p = new Period(dtDateEff, dtDateEch);
            p = p.plusDays(1);
            System.out.println("Periode : Annee : " + p.getYears() 
                    + "    Mois : " + p.getMonths()
                    + "    Semaine : " +  p.getWeeks()
                    + "    Jours: " + p.getDays()
                    + "    Heure: " + p.getHours() 
                    + "    Minutes: " + p.getMinutes()
                    + "    Secondes: " + p.getSeconds());
    Résultat :
    Periode : Annee : 4 Mois : 11 Semaine : 3 Jours: 3 Heure: 0 Minutes: 0 Secondes: 0
    Ce qui nous donne 4 ans 11 mois et 24 jours ( en comptant 7 jours pour une semaine).
    Pour ma part je m'attendrait plutot à 4ans 11 mois et 25 jours.

    Autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
          dtDateEff = new DateTime(1989, 7, 25, 0, 0, 0, 0);
            dtDateEch = new DateTime(1989, 7, 26, 0, 0, 0, 0);
            p = new Period(dtDateEff, dtDateEch);
            p = p.plusDays(1);
     
            System.out.println("Periode : Annee : " + p.getYears() 
                    + "    Mois : " + p.getMonths()
                    + "    Semaine : " +  p.getWeeks()
                    + "    Jours: " + p.getDays()
                    + "    Heure: " + p.getHours() 
                    + "    Minutes: " + p.getMinutes()
                    + "    Secondes: " + p.getSeconds());
    Résultat :
    Periode : Annee : 0 Mois : 0 Semaine : 0 Jours: 2 Heure: 0 Minutes: 0 Secondes: 0
    Ce qui nous donne 2 jours et qui correspond bien au résultat que j'attends.

    La question que je me pose est la suivante :
    Est que la conversion nombres de jours = nombres de semaines * 7 + nombres de jours
    est correctes.
    Y à t-il une autres solution pour obtenir une période en année, mois et jours.

    Merci d'avance pour les réponses.
    En essayant continuellement, on finit par réussir. Donc plus ça rate, plus on a de chances que ça marche !

  2. #2
    Membre actif Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Points : 272
    Points
    272
    Par défaut
    J'ai trouvé une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            DateTime dtDateEff = new DateTime(1989, 7, 25, 0, 0, 0, 0);
            MutableDateTime dtDateEch = new MutableDateTime(1994, 7, 18, 0, 0, 0, 0);
            dtDateEch.addDays(1);
            Period p = new Period(dtDateEff, dtDateEch);
     
            System.out.println("Periode : Annee : " + p.getYears() 
                    + "    Mois : " + p.getMonths()
                    + "    Semaine : " + p.getWeeks()
                    + "    Jours: " + p.getDays()
                    + "    Heure: " + p.getHours() 
                    + "    Minutes: " + p.getMinutes()
                    + "    Secondes: " + p.getSeconds());
    En fait p = p.plusDays(1) ne donne pas le même résultat que dtDateEch.addDays(1);
    Avec ce bout de code j'obtiens les bons résultats sauf pour ce cas
    En essayant continuellement, on finit par réussir. Donc plus ça rate, plus on a de chances que ça marche !

  3. #3
    Membre actif Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Points : 272
    Points
    272
    Par défaut Ca Marche
    Après avoir posé les questions sur le forum de jodaTime j'ai eu les réponses nécéssaires de la part du concepteur de la bibliothèque (Stephen Colebourne).
    La bibliothèque fonctionne donc trés bien et va d'ailleurs servir de base pour l'implémentation des dates dans JAVA 7.

    Pour connaître le principe de fonctionnement de cette bibliothèque voici les 2 post :
    http://sourceforge.net/forum/forum.p...orum_id=337835
    http://sourceforge.net/forum/forum.p...orum_id=337835

    Voici le contenu au cas ces liens n'existerais plus :

    I have another (last example)
    This is the code
    DateTimedtDateEff = new DateTime(1989, 7, 25, 0, 0, 0, 0);
    DateTime dtDateEch = new MutableDateTime(1994, 7, 18, 0, 0, 0, 0);
    dtDateEch.addDays(1);
    p = new Period(dtDateEff, dtDateEch);

    System.out.println(p.toString());

    And the result : P4Y11M3W3D

    I think that the result should be P4Y11M3W4D :
    25/07/1989 to 31/07/1989 => 7 days
    01/08/1989 to 30/06/1994 => 4 years 11 months
    01/07/1994 to 18/07/1994 => 18 days

    Total = 4 years 11 monts 25 days (P4Y11M3W4D)

    Firstly i suppose the end date given to the Period period constructor is exclude (and the start date is include).
    How explain this difference of one day and how work the calcul of period in Joda Time.

    Thanks for your help.

    RATM


    RE: Another question about calcul Period
    By: Stephen Colebourne (scolebourneProject AdminAccepting Donations) - 2006-11-01 14:29
    Joda-Time calculates period by starting with the largest field and working to the smallest field.

    DateTime a = new DateTime(1989, 7, 25, 0, 0, 0, 0);
    DateTime b = new DateTime(1994, 7, 18, 0, 0, 0, 0);

    Given these we ask:
    - how many whole years are there between the two dates => 4
    - add 4 years to the start date - 1993-07-25
    - how many whole months are there between the new temp date and the end date => 11
    - add 11 months to the start date - 1994-06-25
    - how many whole weeks are there between the new temp date and the end date => 3
    - add 3 weeks to the start date - 1994-07-16
    - how many whole days are there between the new temp date and the end date => 2

    Thus - P4Y11M3W2D



    L'autre post :


    Hello everyone,

    I have an example which give strange result :
    This is the code :
    MutablePeriod mp = new MutablePeriod();
    DateTime dtEff1 = new DateTime(2004, 7, 20, 0, 0, 0, 0);
    DateTime dtEch1 = new DateTime(2006, 4, 28, 0, 0, 0, 0);
    mp.add(new Period(dtEff1, dtEch1));
    DateTime dtEff2 = new DateTime(1999, 7, 20, 0, 0, 0, 0);
    DateTime dtEch2 = new DateTime(2004, 7, 20, 0, 0, 0, 0);
    mp.add(new Period(dtEff2, dtEch2));
    DateTime dtEff3 = new DateTime(1986, 1, 9, 0, 0, 0, 0);
    DateTime dtEch3 = new DateTime(1988, 4, 13, 0, 0, 0, 0);
    mp.add(new Period(dtEff3, dtEch3));
    DateTime dtEff4 = new DateTime(1984, 7, 24, 0, 0, 0, 0);
    DateTime dtEch4 = new DateTime(1984, 9, 13, 0, 0, 0, 0);
    mp.add(new Period(dtEff4, dtEch4));
    DateTime dtEff5 = new DateTime(1979, 7, 17, 0, 0, 0, 0);
    DateTime dtEch5 = new DateTime(1984, 7, 24, 0, 0, 0, 0);
    mp.add(new Period(dtEff5, dtEch5));

    System.out.println(mp.toString());

    And the result : P13Y13M4W11D
    I think result with 13M is strange.
    What do you think of this ?

    Greets
    RATM


    RE: Strange result with Period
    By: Stephen Colebourne (scolebourneProject AdminAccepting Donations) - 2006-10-30 02:56
    This is correct behaviour with Joda-Time.

    The operation of adding a period to another period simply adds each field to the matching field. Thus P7M + P7M = P14M.

    If you want to resolve the 13 months in your example back to 1 year and 1 month, then you need to convert the period to an interval with a fixed start date, and then back to a period.

    The reason for this behaviour is that the length of fields can vary (eg. a day may be 23, 24 or 25 hours long when DST is considered). As such, Joda-Time cannot just normalize the fields without the risk of an inaccurate answer.
    En essayant continuellement, on finit par réussir. Donc plus ça rate, plus on a de chances que ça marche !

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

Discussions similaires

  1. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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