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 :

La manipulation des dates en java


Sujet :

Collection et Stream Java

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut La manipulation des dates en java
    Bonsoir les amis. Je viens à vous pour m'éclaircir ce problème de manipulation des dates en java. J'ai vu sur plusieurs forum pour comprendre, mais je me retrouve perdu entre ces innombrables classes (J'ai fais un peu de VB, c'était plus facile). Mon problème c'est que je ne comprends les choses qu'au travers des exemples.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Calendar dateDebut= new GregorianCalendar();
    dateDebut.set(2015,2,25);
    Calendar dateFin=new GregorianCalendar();
    dateFin.set(2015, 5,25);
    est ce que la déclaration et l'initialisation de ces deux dates est juste? si oui, comment calculer la différence en nombre de jours entre les deux dates ?
    Merci à vous
    J'apprends la programmation pour le plaisir

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par stracoma Voir le message

    est ce que la déclaration et l'initialisation de ces deux dates est juste?
    Ce n'est pas mauvais en soit, bien que pour manipuler des Calendar, il faut en général aussi préférer leur associer une timezone spécifique pour éviter les sales blague avec le Day light saving. Ensuite comme ils ont aussi une heure/minute /seconde et que tu ne les as pas changées il ne faut pas oublier d'en tenir compte dans tes éventuels calculs. Enfin, avec Calendar, janvier=0, Février = 1, ... ,il vaux donc mieux écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateDebut.set(2015,Calendar.FEBRUARY,25);
    Citation Envoyé par stracoma Voir le message
    si oui, comment calculer la différence en nombre de jours entre les deux dates ?
    Merci à vous
    en général on met les heures à 0 et on ajoute en boucle 1 jusqu'à ce que les dates soient égales. C'est chiant, long moche et la raison pour laquelle on n'utilise plus cette vieille classe mal fichue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    LocalDate dateDebut= LocalDate.of(2015,2,25);
    LocalDate dateFin=LocalDate.of(2015, 5,25);
    long differenceEnJours = dateDebut.until(dateFin,ChronoUnit.DAYS);
    long differenceEnHeures = dateDebut.until(dateFin,ChronoUnit.MINUTES);
    Period difference =dateDebut.until(dateFin);

  3. #3
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    En fait, java dispose depuis la version 8 d'une nouvelle api de gestion du temps, java.time . Donc tu trouveras beaucoup de tuto sur les vieilles classe moches comme dit tchize_, qu'il nest pas urgent de connaitre (sauf si tu ne peux pas utiliser java 8).
    Un bon tutoriel : http://soat.developpez.com/tutoriels...me-date-java8/
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    il y a aussi des ressources dans les tutoriels et FAQs du site :
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci de votre aide. Les choses commencent à s’éclaircir, mais en faisant certains exemples je trouve une chose bizarre:
    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 class LesDates {
     
    	public static void main(String[] args) {
    		LocalDate date1=LocalDate.of(2015, Calendar.APRIL, 29);
    		LocalDate date2=LocalDate.of(2015, Calendar.APRIL, 30);
    		LocalDate date3=LocalDate.of(2015, Calendar.MAY, 1);
    		long zone1=date1.until(date2, ChronoUnit.DAYS);
    		long zone2=date1.until(date3, ChronoUnit.DAYS);
    		System.out.println("zone1 = "+zone1);
    		System.out.println("zone2 = "+zone2);
     
    	}
    }
    console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    zone1 = 1
    zone2 = 3
    Dans la variable zone2 je m'attendais à la valeur 2 et non à 3 (du 29/04/2016 au 01/05/2016 il n'y a que 2 jours) !! y a-t-il une explication?
    J'apprends la programmation pour le plaisir

  6. #6
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Encore plus flagrant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static void main(String[] args) {
    		LocalDate date=LocalDate.of(2016, Calendar.APRIL, 10);
    		long duree=date.until(LocalDate.now(), ChronoUnit.DAYS);
    		System.out.println(duree);// affiche 45
     
    	}
    entre le 10/04/2016 et ce jour(24/04/2016) c'est 14 jour et non 45. il y a surement une chose (ou des choses) qui m'échappe
    J'apprends la programmation pour le plaisir

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Les constantes Calendar.xxx tu oublie, c'est la vieille api qui compte les mois à partir de 0 (Janvier=0, Février=1, ...). La nouvelle api compte les mois à partir de 1 (Janvier=1, Février=2, ...) ce qui est plus intuitif. Donc là ton code il a créé non par avril/mai mais , mars/avril. Il y a bien trois jours entre 30 mars et le 1er avril

    Si tu veux utiliser des constantes, les nouvelles constantes sont dans la class Month, qui présentent l'avantage d'être des enum et donc éviter de les passer comme arguments à la mauvaise méthode (contrairement aux constantes de Calendar qui sont des int):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class LesDates {
     
    	public static void main(String[] args) {
    		LocalDate date1=LocalDate.of(2015, Month.APRIL, 29);
    		LocalDate date2=LocalDate.of(2015, Month.APRIL, 30);
    		LocalDate date3=LocalDate.of(2015, Month.MAY, 1);
    		long zone1=date1.until(date2, ChronoUnit.DAYS);
    		long zone2=date1.until(date3, ChronoUnit.DAYS);
    		System.out.println("zone1 = "+zone1);
    		System.out.println("zone2 = "+zone2);
     
    	}
    }

  8. #8
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci infiniment de votre aide tchize_
    J'ai trouvé mon bonheur dans cette discussion
    sujet résolu
    J'apprends la programmation pour le plaisir

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

Discussions similaires

  1. [JDBC] manipulation des dates
    Par zais_ethael dans le forum JDBC
    Réponses: 3
    Dernier message: 11/12/2005, 19h55
  2. [JDBC] manipulation des dates/heures en Java
    Par kurkLord dans le forum JDBC
    Réponses: 6
    Dernier message: 09/08/2004, 12h49
  3. Manipulations des Dates
    Par kurtc dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/04/2004, 14h39
  4. [IB6][BCB5]Manipulation des dates.
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 09/04/2004, 15h33
  5. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 11h46

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