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 :

Comment faire la somme entre les times?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut Comment faire la somme entre les times?
    Bonsoir,

    je cherche comment faire la somme entre Times différents. Par exemple, j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     t1 = 10:03:45
    t2 = 03:00
    t3 = 01:12
     
    ==> total = 10:07:57
    Voici mon essai du code;
    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
     
    SimpleDateFormat formatter = new SimpleDateFormat("mm:ss"); 
    		SimpleDateFormat formatter2 = new SimpleDateFormat("HH:mm:ss"); 
     
    		Time t1 = new Time(formatter.parse("10:03:45").getTime());
    		Time t2 = new Time(formatter.parse("03:00").getTime());
    		Time t3 = new Time(formatter.parse("01:12").getTime());
     
     
    		Long total = formatter2.parse(t1.toString()).getTime() +(formatter.parse(t2.toString()).getTime() + formatter.parse(t3.toString()).getTime());
     
    		System.out.println("***** gettime t1 "+formatter2.parse(t1.toString()).getTime()); // -2997000
    		System.out.println("******* gettime t2 "+formatter.parse(t2.toString()).getTime()); // -3597000
    		System.out.println("******* gettime t3 "+formatter.parse(t3.toString()).getTime());  // -3599000
     
    		System.out.println("-----------total en heurs "+formatter2.format(total)); // 22:10:07
    		System.out.println("-----------total "+total); //-10193000
    Je n'ai pas compris pourquoi il affiche la négation de Time et aussi le total n'est pas correcte.

    Merci de m'aider pour trouver le total exacte des Times,

  2. #2
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut
    J'ai mal utilisé le java.time. Aussi il faut utiliser TimeZone pour le timeFormat .

    Voici la vrai solution pour faire la somme entre les times:

    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
     
              String time1="10:03:45";
              String time2="03:00";
              String time3="01:12";
     
              SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
              timeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
              SimpleDateFormat formatter = new SimpleDateFormat("mm:ss"); 
              formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
     
              Date date1 = timeFormat.parse(time1);
              Date date2 = formatter.parse(time2);
              Date date3 = formatter.parse(time3);
     
              long sum = date1.getTime() + date2.getTime()+date3.getTime();
     
              System.out.println("----- sum "+sum);
     
              String date = timeFormat.format(new Date(sum));
              System.out.println("****total  "+date); // 10:07:57

  3. #3
    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
    Mignon, mais ces histoires de time zone font très bizarre, et dès qu'on dépasse les 24 heures ça ne marche plus.

    J'ai pas trouvé de moyen de faire ça sans me taper le parsing moi-même. Voilà à quoi ça ressemble :

    Déjà définir ces méthodes utilitaires :

    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
    33
    private static final Pattern TIME_IN_HOURS = Pattern.compile("\\d{2,}:\\d{2}:\\d{2}");
    private static final Pattern TIME_IN_MINUTES = Pattern.compile("\\d{2}:\\d{2}");
     
    public static Duration parseTime(String time) {
      int hours;
      int minutes;
      int seconds;
      if(TIME_IN_HOURS.matcher(time).matches()) {
        String[] parts = time.split(":");
        hours = Integer.parseInt(parts[0]);
        minutes = Integer.parseInt(parts[1]);
        seconds = Integer.parseInt(parts[2]);
      } else if(TIME_IN_MINUTES.matcher(time).matches()) {
        hours = 0;
        String[] parts = time.split(":");
        minutes = Integer.parseInt(parts[0]);
        seconds = Integer.parseInt(parts[1]);
      } else {
        throw new IllegalArgumentException("Invalid time: " + time);
      }
     
      return Duration
        .ofHours(hours)
        .plusMinutes(minutes)
        .plusSeconds(seconds);
    }
     
    public static String formatTime(Duration time) {
      return String.format("%02d:%02d:%02d",
        time.toHours(),
        time.toMinutes() % 60,
        time.getSeconds() % 60);
    }
    et les utiliser comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String time1="10:03:45";
    String time2="03:00";
    String time3="01:12";
     
    Duration duration1 = parseTime(time1);
    Duration duration2 = parseTime(time2);
    Duration duration3 = parseTime(time3);
     
    Duration sum = duration1.plus(duration2).plus(duration3);
     
    String sumString = formatTime(sum);
    System.out.println(sumString);
    Bon du coup on a presque aussi vite fait de compter directement les secondes au lieu d'utiliser Duration, certes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Question conne, mais tant qu'on en est a utiliser java.time, pourquoi ne pas utiliser java.time.Duration qui permet justement d'ajouter des durées (et autres) entre eux ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    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
    Dans le post de départ, c'est la classe java.sql.Time qui était utilisée, pas le package java.time.

    Mais moi oui j'utilise Duration. Cela dit, ça n'aide pas plus que ça. Un int qui représente un nombre de secondes entre deux instants fait aussi bien.
    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. Réponses: 3
    Dernier message: 20/06/2008, 16h37
  2. [Dates] Comment faire la somme de deux dates ?
    Par Chikh001 dans le forum Langage
    Réponses: 8
    Dernier message: 18/04/2008, 18h24
  3. [Time] Comment calculer la différence entre deux Time?
    Par adil_vpb dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 14/03/2007, 17h24
  4. [Time] comment calculer une différence entre deux Time?
    Par adil_vpb dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/03/2007, 17h02
  5. comment faire des espaces entre deux liens ???
    Par baaps dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/03/2005, 09h53

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