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 :

Calculer le nombre de mois entre 2 dates


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut Calculer le nombre de mois entre 2 dates
    Bonjour
    J'aurais besoin de calculer le nombre de mois plein entre 2 dates:
    Par exemple entre 2/3/2007 et 3/1/2007 ==> 1 mois
    entre 3/3/2007 et 3/1/2007 ===> 2 mois
    Existe t'il une fonction java qui le fait directement en passant les 2 dates en paramètres du style MONTHS_BETWEEN sous ORACLE

    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    En supposant que les dates sont de la forme jour/mois/année, et que la première est toujours inférieur à la seconde...

    Nicolas

    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
    // appeler le fichier Test.java
    // par Nicolas_75
    // lundi 19 février 2007
     
    import java.text.SimpleDateFormat;
    import java.util.*;
     
    public class Test {
     
        public static int nbOfMonthsBetweenTwoDates(String dateString1, String dateString2) throws Exception  {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            Date date1 = sdf.parse(dateString1);
            GregorianCalendar gc1 = new GregorianCalendar();
            gc1.setTime(date1);
            Date date2 = sdf.parse(dateString2);
            GregorianCalendar gc2 = new GregorianCalendar();
            gc2.setTime(date2);
            int gap = 0;
            gc1.add(GregorianCalendar.MONTH, 1);
            while(gc1.compareTo(gc2)<=0) {
                gap++;
                gc1.add(GregorianCalendar.MONTH, 1);
            }
            return gap;
        }
     
        public static void main(String[] args) {
            try {
                System.out.println(nbOfMonthsBetweenTwoDates("3/1/2007", "2/4/2007")+" mois");
            } catch (Exception e) { e.printStackTrace(); }    
        }
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut
    Bonsoir
    Ca marche, merci

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Je t'en prie.

  5. #5
    Membre éclairé Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Mouai, ça marchotte...

    Si :
    date1 = "01/03/2010"
    date2 = "31/03/2010"

    --> gap = 0

    Si :
    date1 = "01/03/2010"
    date2 = "31/04/2010"

    --> gap = 2


    Tout ceci n'est pas logique. Si entre le premier jour et le dernier jour du mois la fonction retourne 0 mois, alors elle devrait retourner 1 mois entre le premier jour du mois et le dernier jour du mois suivant.
    E clair je devrais avoir comme résultat 0 puis 1 ou 1 puis 2, mais pas 0 et 2.

  6. #6
    Membre chevronné Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Par défaut
    Et un truc aussi con que ca :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
     
    		Date dateA = df.parse("01/05/2010");
    		Date dateB = df.parse("25/09/2010");
     
    		long diffMs = dateB.getTime() - dateA.getTime();
     
    		System.out.printf("En milli-secondes : %d\n", diffMs);
    		System.out.printf("En secondes : %f\n", (double)diffMs/1000);
    		System.out.printf("En minutes : %f\n", (double)diffMs/1000/60);
    		System.out.printf("En heures : %f\n", (double)diffMs/1000/60/60);
    		System.out.printf("En jours : %f\n", (double)diffMs/1000/60/60/24);
    		System.out.printf("En mois : %f\n", (double)diffMs/1000/60/60/24/30);

    avec le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    En milli-secondes : 12700800000
    En secondes : 12700800,000000
    En minutes : 211680,000000
    En heures : 3528,000000
    En jours : 147,000000
    En mois : 4,900000

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ouaip. Personnellement, ce que je ferais dépendrait du résultat précisément attendu (par exemple, zéro mois entre le début du mois et la fin du mois, bof bof. 1 mois entre le dernier jour du mois et son lendemain, bof bof aussi.)

    Mais bon a priori, pour ça, je prendrais juste le mois et l'année de chaque Date (avec un Calendar,) je multiplierais les années par 12, ajouterais les mois, et considérerais la différence comme le nombre de mois entre les deux dates.

    'Fin bon, ces messages datent de 2007, je ne pense pas que les auteurs originaux puissent venir défendre leurs idées.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Calcul du nombres de mois entre deux dates : erreur
    Par khroutchev dans le forum Access
    Réponses: 1
    Dernier message: 23/05/2013, 14h11
  2. [XL-2007] Calculer le nombre de mois entre deux dates?
    Par EmmanuelleC dans le forum Excel
    Réponses: 11
    Dernier message: 08/06/2010, 04h11
  3. [SQL] Calcul du nombre de mois entre deux dates
    Par Lolie11 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/03/2009, 11h46
  4. Calcul du nombre de mois entre 2 dates
    Par marrabelle dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 26/04/2007, 01h31
  5. Calcul du nombre de mois entre 2 dates
    Par Bes74 dans le forum Access
    Réponses: 1
    Dernier message: 22/08/2006, 22h15

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