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

Langage Java Discussion :

nombre de jours entre deux date


Sujet :

Langage Java

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 152
    Points : 100
    Points
    100
    Par défaut nombre de jours entre deux date
    Bonjour,

    Comment savoir le nombre de jours entre deux date :

    exp : 2006-05-01 et 2006-08-15

    et merci

  2. #2
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    A priori, ça devrait marcher.

    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
    public class Boby {
     
    	private long CONST_DURATION_OF_DAY = 1000l * 60 * 60 * 24;
     
    	public Boby() {
    		// 2006-05-01
    		Calendar calendar1 = new GregorianCalendar();
    		calendar1.set(Calendar.YEAR, 2006);
    		calendar1.set(Calendar.MONTH, 4);
    		calendar1.set(Calendar.DAY_OF_MONTH, 1);
    		Date date1 = calendar1.getTime();
    		//  2006-08-15
    		Calendar calendar2 = new GregorianCalendar();
    		calendar2.set(Calendar.YEAR, 2006);
    		calendar2.set(Calendar.MONTH, 8);
    		calendar2.set(Calendar.DAY_OF_MONTH, 15);
    		Date date2 = calendar2.getTime();
    		// Différence
    		long diff = Math.abs(date2.getTime() - date1.getTime());
    		long numberOfDay = (long)diff/CONST_DURATION_OF_DAY;
    		System.err.println("Le nombre de jour est : " + numberOfDay);
    	}
     
    	public static void main(String[] args) {
    		new Boby();
    	}
    }

  3. #3
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Ca ça marche sûr (avec gestion heure d'été/heure d'hiver) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	public static double getDaysBetweenDates(Date theEarlierDate, Date theLaterDate) {
    		double result = Double.POSITIVE_INFINITY;
    		if (theEarlierDate != null && theLaterDate != null) {
    			final long MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24;
    			Calendar aCal = Calendar.getInstance();
    			aCal.setTime(theEarlierDate);
    			long aFromOffset = aCal.get(Calendar.DST_OFFSET);
    			aCal.setTime(theLaterDate);
    			long aToOffset = aCal.get(Calendar.DST_OFFSET);
    			long aDayDiffInMili = (theLaterDate.getTime() + aToOffset) - (theEarlierDate.getTime() + aFromOffset);
    			result = ((double) aDayDiffInMili / MILLISECONDS_PER_DAY);
    		}
    		return result;
    	}

  4. #4
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Et pourquoi pas faire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     final long MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24; 
     long delta = d2.getTime() - d1.getTime();
     return delta / (MILLISECONDS_PER_DAY);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Juste pour l'histoire je sais que tout les jours n'ont pas la même durée car parfois le dernier jour de l'année est plus de une seconde ou un truc du genre, mais bon cela ne doit pas trop influencer le resultat.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 854
    Points : 22 873
    Points
    22 873
    Billets dans le blog
    51
    Par défaut
    Style le 31 decembre 2005 qui a eut une seconde supplementaire.

  7. #7
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Donc le code de natha ne marche pas non plus ?


    Style le 31 decembre 2005 qui a eut une seconde supplementaire.
    Je ne le savais pas. Merci pour l'info

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 854
    Points : 22 873
    Points
    22 873
    Billets dans le blog
    51
    Par défaut
    Pourtant ils en ont parle dans les journeaux televise dans les journees precedents le nouvel an. La seconde de compensation a ete introduite au niveau des horloges atomiques puis repercutee sur les ordis et machines connectees via NTP en cascade.

    Si je me souviens bien des reportages, les date ou ces secondes de compensation sont inserees (comme celle evoquee ici) ne font pas partie d'un algorithme specifique au calendrier gregorien mais sont arbitrairement choisies par l'organisme international qui gere le temps (sais plus son nom). L'un des intervenants avait par ailleurs indique que cette compensation aurait du normalement avoir lieu qq annees auparavant mais elle avait ete retardee pour x raisons diverses.

    A priori non en effet le code peut ne pas fonctionner (enfin si on veut un resultat sur a 100%), ni les classes Calendar/Date d'ailleurs (sauf patch ulterieur). Mais bon apres il faut voir si sur des longues periodes ca ne compense pas une limitation du calendrier gregorien et si au final on ne retombe pas sur ses pattes.

    Voir :
    http://fr.wikipedia.org/wiki/Seconde_additionnelle
    http://fr.wikinews.org/wiki/Une_seconde_intercalaire_ajout%C3%A9e_au_31_d%C3%A9cembre_2005

  9. #9
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Ici le probleme demandé en le nombre de jours donc on peut supposer que le degre de precision n'est pas la seconde.

    Donc je pense que ma solution est amplement suffissante. (il faut bien trouver une justification ).

    Je vais aller lire tes liens sur wikipédia
    merci.

  10. #10
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par gronono
    Donc le code de natha ne marche pas non plus ?
    A priori ça marche... m'enfin c'est pas moi qui ait fait cette méthode alors je garanti rien.

  11. #11
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Ca marche globalement, mais tu ne tiens pas de la seconde qui s'ajoute de temps en temps.

  12. #12
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Ca c'est à Java de gérer, pas à moi

  13. #13
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Bien sur que c'est à java.

    L'ecart ne doit être enorme entre la réalité et le resultat.

  14. #14
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    En même temps... le nombre de jour(s) entre deux dates au format jj-mm-aaaa étant au moins de 1.
    Une seconde ramenée à la journée représente :
    1 / 86400 = 1,1574074074074074074074074074074e-5
    Autant dire rien du tout....
    Du coup , ce delta est plus que négligeable et les solutions "simples" comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    long diff = Math.abs(date2.getTime() - date1.getTime());
    long numberOfDay = (long)diff/CONST_DURATION_OF_DAY;
    doivent être largement suffisantes...

Discussions similaires

  1. calcul nombre de jours entre deux dates
    Par charlene44 dans le forum Langage
    Réponses: 7
    Dernier message: 21/08/2012, 14h06
  2. Nombre de jours entre deux dates
    Par Lunixinclar dans le forum C
    Réponses: 3
    Dernier message: 15/10/2006, 18h10
  3. Réponses: 2
    Dernier message: 29/05/2006, 19h16
  4. [MS-DOS] Compter les nombres de jours entre deux dates diffé
    Par Furius dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 19/02/2006, 13h33
  5. [Dates] Nombre de jours entre deux dates
    Par cmoiscrat dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2005, 15h25

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