2010-11-29 5 views
2

Comment puis-je calculer la différence entre deux fois au format 24h en Java? Je charge les heures depuis un fichier. Les temps sont enregistrés sous la forme int s, par exemple: 19 45 06 34 (les deux premiers chiffres représentent la première fois, les deux derniers, la deuxième fois). Comment puis-je calculer la différence entre eux et l'imprimer au format ??h ??m? Par exemple, les heures ci-dessus devraient montrer 10h 49m. OK ... Je suis vraiment un débutant et c'est une mission, je sais que ce n'est pas utile. Disons que j'ai quelque chose comme ça enregistré dans mon dossier:
« SO35 13 56 05 26 » — (premier est le code du tout, et les deux fois)Comment puis-je calculer la différence entre deux fois en format 24h en utilisant Java?

Je ne sais même pas comment le charger de le fichier, puis le calculer. Ce code est pour ramasser le temps à calculer. A l'intérieur du fichier, il y a 24 lignes similaires à celle que je mets ici.

Répondre

7

Utilisez Joda Time

  • diviser la chaîne en deux
  • Parse les utiliser un DateTimeFormatter (idéalement dans un LocalTime)
  • Obtenez la différence entre les utilisant new Period(from, to, PeriodType.minutes().withHours())
+0

@Downvoter: vous voulez commenter? –

+0

+1 Ne pas obtenir le downvote. Bien qu'il s'agisse d'une bibliothèque tierce, je pense que Joda Time est essentiel si vous devez manipuler la date et l'heure. – helpermethod

0

Tout initialiser deux objets Date, puis entrez les valeurs des deux heures. Ensuite, vous pouvez juste convertir ce format en millisecondes et les soustraire.

0

Vous devriez probablement les convertir en objets Date, soustraire les dates (elles seront égales aux comptes milisecondes "Longs"), puis les convertir dans le format souhaité.

Faites attention si vous passez les limites du jour - puisque vos dates ne comprennent pas les limites du jour, cela semble plutôt inutile - devoir ou quelque chose?

+0

oui mission et je suis vraiment begginer donc je ne comprends pas vraiment tout ce que vous écrivez ici pour moi ... je ne peux pas l'utiliser. Je n'ai aucune idée de comment l'utiliser. :( –

+1

Bill K signifie probablement "compte milliseconde", c'est-à-dire que chaque objet Date stocke intérieurement un moment dans le temps comme un temps qui compte comme millisecondes – Avrom

0

Ceci est si simple, vous pouvez aussi bien convertir les deux fois en minutes, soustraire la différence et convertir en heures/minutes.

Scanner s 
int diff = Math.abs(s.nextInt()*60 + s.nextInt() - s.nextInt()*60 - s.nextInt()); 
System.out.println(diff/60 + "h " + diff % 60 + "m"); 
0

Je présume que ces deux temps sont de temps en temps? , c'est-à-dire la différence entre 19h45 et 6h34 le jour suivant? Parce que ce serait différent de 6:34 à 19:45. (Quelque chose que vous devez garder à l'esprit.) Ce que je vous conseille de faire (si vous ne voulez pas utiliser Joda Time) est de regarder en utilisant la classe SimpleDateFormat et la classe Calendar. Pour obtenir la différence exacte dans millisecondes vous utilisez un objet Date et la méthode getTime. Vous pouvez ensuite diviser par le nombre de millisecs dans une heure puis par le nombre de millisecondes dans une minute.

Voir:

http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html

http://download.oracle.com/javase/6/docs/api/java/util/Date.html

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

0

Vous ne avez pas besoin de bibliothèques pour le faire.Il suffit de le résoudre comme vous le feriez sur du papier

HH MM 
    06 34 
- 19 45 
-------- 
    10 49 

Vous ne pouvez pas soustrayez 34 de 45 parce que 34 est inférieur à 45, de sorte que vous « emprunter » 60 minutes des heures. Vous finissez avec (60 + 34) -45 = 49 et les heures sont réduites de 6 à 5. Puisque le 5 est inférieur à 19, nous supposons que nous avons traversé dans le jour suivant et donc la différence dans les heures est 5+ (24-19) = 10.

Voici ce que le code ressemblerait à ceci:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 

public class Test { 

    public static void main(String[] args) { 

    final String filename = "myfile.txt"; 
    BufferedReader in = null; 
    try { 
     in = new BufferedReader(new FileReader(filename)); 
     String line; 

     //read the file, line-by-line 
     while ((line = in.readLine()) != null) { 

      //break the line into various pieces 
      Scanner scanner = new Scanner(line); 
      scanner.next(); //skip the first bit 
      int hour1 = scanner.nextInt(); 
      int min1 = scanner.nextInt(); 
      int hour2 = scanner.nextInt(); 
      int min2 = scanner.nextInt(); 

      int diffMin; 
      if (min2 < min1) { 
       // borrow 60mins from the hours 
       diffMin = 60 + min2 - min1; 
       if (hour2 == 0) { 
        hour2 = 23; 
       } else { 
        hour2--; 
       } 
      } else { 
       diffMin = min2 - min1; 
      } 

      int diffHour; 
      if (hour2 < hour1) { 
       diffHour = hour2 + 24 - hour1; 
      } else { 
       diffHour = hour2 - hour1; 
      } 
      System.out.printf("%sh %sm\n", diffHour, diffMin); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
      } 
     } 
    } 
    } 
} 

Ce code pourrait être compacté, mais je l'ai fait verbeux pour que vous compreniez ce qui se passe.

+0

Je ne peux pas le faire fonctionner s'il vous plaît regardez mon problème, j'ai mis quelques nouvelles informations, peut-être vous connaîtrez une solution.Merci ... –

+1

Même si vous n'avez * besoin * d'aucune bibliothèque, ils sont sûrs de rendre la vie plus simple, IMO. –

Questions connexes