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 :

[debutant] intersection de deux plages horaires


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut [debutant] intersection de deux plages horaires
    Bonjour,

    Auriez vous une idée pour calculer simplement "l'intersection" de plages horaires ?

    Je m'explique : soit un evenement dont on connait le debut et la fin (Date)
    et une plage du type : 8h00-12h00.

    Je voudrais trouver à partir des deux objets Date (debut et fin), quel est le temps de l'evenement passé durant cette plage.

    Ex : debut = 22h00 le 10/05/2006
    fin = 12h00 le 11/05/2006.

    Plage = 21h00 -> 3h00 (tous les jours)

    Ici, la réponse serait : 5h00


    Pour debut = 20h00 le 07/07/2007
    fin = 21h30 le même jour, la reponse est 30min...

    Merci de votre coup de main ;-)

  2. #2
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Si j'ai compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    long l1 = date1.getTime();
    long l2 = date2.getTime();
    long duree = l2-l1;
    Date plage = new Date(duree);
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    J'ai pas du etre clair, alors je reprends.

    On part de :
    - 2 dates -> Date debut, fin ;
    - 1 plage -> ??? (comment la définir)

    Par exemple:
    debut et fin sont le debut et la fin d'un appel telephonique
    plage est la plage "plein tarif", mettons, de 22h00 à 6h00 (la nuit)

    => Quel est la durée de nuit (en millisec.) de cet appel

    Merci

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Et bien tu fais comme indiqué ci dessus, date.getTime() te renvoyant la valeur en millisecondes de la date
    Et puis pour créer la date, l'utilsation d'un SimpleDateFormat dera l'affaire
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    Merci g-rare !

    Je commencais à me dire que décidement je n'arrivais pas à me faire comprendre.

    Par rapport à ton code dans le lien donné, mon probleme vient de la définition de la fourchette.

    Ainsi dans le tien, les bornes de la fourchette sont des 'Date' connues alors que pour moi, c'est du style "de telle heure à telle heure, quel que soit le jour". Aurais-tu une idée ?

    Merci de ton aide.

    Pour les autres, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public int fonction(
            Date debutFourchette,
            Date finFourchette,
            Date debutMaladie,
            Date finMaladie) {
            long joursMin = Math.max(debutFourchette.getTime(), debutMaladie.getTime());
            long joursMax = Math.min(finFourchette.getTime(), finMaladie.getTime());
            long unJour = 24 * 60 * 60 * 1000; // en ms
            return (int) Math.ceil((double) (joursMax - joursMin) / unJour);
        }

  7. #7
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par absolut75
    Ainsi dans le tien, les bornes de la fourchette sont des 'Date' connues alors que pour moi, c'est du style "de telle heure à telle heure, quel que soit le jour". Aurais-tu une idée ?
    "SimpleDateFormat" permet facilement (comme son nom l'indique) de passer d'un String à une Date, et vice-versa : avec des <<patterns>> ou modèles de représentation du type "dd/MM/yyyy HH:mm:ss.SSS"
    http://java.sun.com/j2se/1.4.2/docs/...ateFormat.html
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    Ok pour SimpleDateFormat. Mais le problème que je me pose ne vient pas de là.

    Finalement je voudrais creer les bornes de ma fourchette facilement : si il n'y avait pas de probleme de changement de jour, je ferai effectivement un truc du genre :

    Date DebutFourchette=SimpleDateFormat.parse("22h00");
    Date FinFourchette=SimpleDateFormat.parse("06h00");

    La le probleme, c'est que je me retrouve avec une Fin antérieure au début (car la fin de la plage est à 6h00, le jour suivant)

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    En fait voilà ce qu'il faudrait :
    A partir de Date debutEvenement, il me faut creer :

    Date debutFourchette = la date correspondant au premier de 6h00 ou 22h00 posterieur à debutEvenement

    Date finFourchette = la date correspondant au premier de 6h00 ou 22h00 posteriur à debutFourchette.

    Apres je me débrouille ;-)
    Merci encore

  10. #10
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par absolut75
    Date debutFourchette = la date correspondant au premier de 6h00 ou 22h00 posterieur à debutEvenement
    1 > initialiser un GregorianCalendar avec "debut"
    2 > si sont heure est supérieure à 22 (méthodes <<get>>)
    alors ajouter 1 jour et passer son heure-minute-seconde-ms à 6H (méthodes <<set>>)
    sinon passer son heure-minute-seconde-ms à 22H (méthodes <<set>>)
    3 > instancier une Date à partir de la date&heure récupérée (en ms ) depuis ce Calendar

    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    Alors là je crois que je vais y arriver.

    Merci de ton aide une fois de plus.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/10/2010, 16h24
  2. Réponses: 2
    Dernier message: 30/03/2010, 10h25
  3. plages horaires de deux heures
    Par ELIC dans le forum Langage SQL
    Réponses: 10
    Dernier message: 26/09/2009, 23h25
  4. calcul délais entre deux dates avec plages horaires
    Par leila eco dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/01/2007, 16h51
  5. [prg jeux ]Définir l'intersection de deux rectangles
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 30/07/2003, 18h11

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