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

Java Discussion :

Date, Calendar, comparaison


Sujet :

Java

  1. #1
    Invité
    Invité(e)
    Par défaut Date, Calendar, comparaison
    Bonjour,

    J'ai une map suivante : Map<Calendar, MonObjet>
    Seulement je voudrais savoir si il y a un objet ajouté aujourd'hui.
    Comment puis je faire, car la date enregistre l'heure et donc les objets sont différents.
    J'avais pensé a faire, à l'enregistrement et à la consultation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	Calendar ajd = new GregorianCalendar();
    		int j = ajd.get(Calendar.DAY_OF_MONTH);
    		int m = ajd.get(Calendar.MONTH);
    		int a = ajd.get(Calendar.YEAR);
    		Calendar date = new GregorianCalendar(a,m,j);
    Comme ca, l'heure n'impacte pas sur le comparaison.
    Il y a pas un meilleur moyen de faire ?

    Bonne journée.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Pour comparer que 2 dates sont au même jour (tiré de Commons Apache) :

    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
     /**
         * <p>Checks if two calendar objects are on the same day ignoring time.</p>
         *
         * <p>28 Mar 2002 13:45 and 28 Mar 2002 06:01 would return true.
         * 28 Mar 2002 13:45 and 12 Mar 2002 13:45 would return false.
         * </p>
         * 
         * @param cal1  the first calendar, not altered, not null
         * @param cal2  the second calendar, not altered, not null
         * @return true if they represent the same day
         * @throws IllegalArgumentException if either calendar is <code>null</code>
         * @since 2.1
         */
        public static boolean isSameDay(Calendar cal1, Calendar cal2) {
            if (cal1 == null || cal2 == null) {
                throw new IllegalArgumentException("The date must not be null");
            }
            return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) &&
                    cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
                    cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR));
        }
    Pour récupérer la date courante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Calendar now = Calendar.getInstance();
    Avec ça tu as tout ce qui te faut.

    Romain.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par tzusiou Voir le message
    J'ai une map suivante : Map<Calendar, MonObjet>
    Seulement je voudrais savoir si il y a un objet ajouté aujourd'hui.
    Comment puis je faire, car la date enregistre l'heure et donc les objets sont différents.
    En Java 1.8, il vaudrait mieux une Map<LocalDate, MonObject>, ce qui impose que la date n'a pas de dimension d'heure.
    De manière générale ce sera plus facile à construire.

    Citation Envoyé par tzusiou Voir le message
    Il y a pas un meilleur moyen de faire ?
    Sans Java 1.8, pas spécialement, non. Il n'y a pas de moyen plus pratique de construire une Date ou un Calendar réglé pile sur un jour, minuit.
    Il vaudrait quand même mieux remplacer le Calendar par Date dans la Map, pour réduire les temps de calcul.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    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
    Un Calendar ne devrait de toutes façons pas apparaitre comme clé d'un Map, car il n'est pas immuable.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Une Date n'est pas immutable non plus... Et ça devient compliqué de refuser d'indexer par Date -_-°.
    Évidemment il s'agit de "faire comme si" c'était immutable et de jamais modifier quoi que ce soit après avoir atteint l'état voulu de l'objet.

    Bien sûr il aurait fallu que Date soit immutable, ce n'est pas le cas et c'est dommage. Une raison de plus de passer au modèle 1.8 où les classes représentant des informations temporelles sont toutes immutables.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    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
    rien n'empêche de convertir la date en String ou de créer un classe immuable pour servir de clé
    C'est juste qu'au niveau de Calendar, je sais pas toi, mais moi j'ignore comment hashcode fonctionne, du coup j'ignore quelle méthodes je peux appeler dessus en gardant l'immuabilité....

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Bonne remarque. J'ai pas eu de problème les quelques fois où j'ai vu ça et j'y ai pas tellement réfléchi, mais après tout la doc ne garantit pas grand-chose et il y a des cas tricky.
    Je suis parti du principe qu'il respectait le fait que si je ne cherche pas à changer quelque chose au calendar entre deux lectures, ces deux lectures représentent les mêmes données et donnent le même hashCode. C'est le cas, mais la première lecture, via hashCode ou autre, peut déclencher un calcul des valeurs exactes des champs en fonction des valeurs demandées.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci de vos réponse,
    J 'ai utilisé la solution de mettre la date à minuit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maMap.get(new GregorianCalendar(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH)))
    Car je suis sous java 1.7 donc pas de localDate pour moi .

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

Discussions similaires

  1. [date] simple comparaison
    Par Katachana dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 23/05/2007, 17h46
  2. JXDataPicker - Date Calendar
    Par fabred dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 10/04/2007, 10h41
  3. [Dates] Pb comparaison d'heures
    Par nais_ dans le forum Langage
    Réponses: 1
    Dernier message: 04/09/2006, 09h55
  4. [Dates] Problème comparaison de dates
    Par Davboc dans le forum Langage
    Réponses: 2
    Dernier message: 23/08/2006, 12h23
  5. [Dates] problème Comparaison dates
    Par gwen-al dans le forum Langage
    Réponses: 4
    Dernier message: 06/01/2006, 11h24

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