-1
votes

Java calculer la différence de temps entre l'enregistrement et l'extérieur

Je veux calculer l'heure de la différence de temps et la minute sans à l'aide de Java datformat

l'utilisateur doit être horloge en: 23:00 Horloge Out: 01:00

La sortie attendue doit être quelque chose comme 2 heures 00 minutes .

mais comment puis-je les calculer? xxx

}

Après avoir examiné toutes les solutions que vous avez données. Voici ce que j'ai édité. Mais j'ai toujours trouvé un problème est, Si horloge dans 23:00 horloge OUT: 01:00 et la sortie est 22hour (s) 0 minute (s) . La sortie doit être 02 heure (s) 0 minute (s) . xxx


12 commentaires

Stackoverflow.com/questions/4927856 / ...


Java propose des méthodes pour obtenir des données comme celle-ci dans l'heure de l'heure, pourquoi n'utilisez-vous pas ceux?


@Jens j'ai mentionné "sans utiliser dateformat"


@Garyhooi je n'ai pas mentionné DateFormat.


@Sultuske j'ai mentionné "sans utiliser dateformat"


@Garyhooi Oui, j'ai vu ça. Mais puisque je n'ai jamais rien dit sur l'utilisation de DateFormat, ou tout ce que vous parlez, je ne vois pas votre point.


Il y a 24 heures par jour et 60 minutes en une heure, quelle est votre problème parce que pour moi, les mathématiques sont assez simples? Et la réponse à votre exemple est de 21 heures et 50 minutes, pas de 2 heures et 10 minutes.


@Joakimdanielson à moins d'avoir mélangé les heures de pointe et chronométrée


Mon conseil: Convertissez les deux fois en "minutes après minuit" et soustrayez "Out" - "In". Si c'est <0 alors (je suppose), ils ont chronométré le lendemain, ajoutez donc une journée de 1 jour. Ensuite, convertissez-vous en heures et minutes si nécessaire.


@ Olev.v. Vous devez créer un lien vers celui qui n'utilise aucune classe de formulation de date, ancienne ou nouvelle, car cela fait partie de l'exigence. Sinon, ce n'est pas un duplicata.


Merci, @joakimdanielson, j'ai raté ces quatre mots (même si deux d'entre eux étaient en grasface). J'ai rouvert. Gary HOOI, pourquoi sans format de date? Tandis que la classe dateformat est notoirement gênant et longtemps obsolète, la classe localTime peut analyser vos temps sans formateur, ne serait-ce pas idéal?


Dupliqué possible de Comment éviter le temps négatif entre la différence de temps? Des quatre réponses, aucune n'utilise dateformat .


5 Réponses :


-1
votes

J'ai ajouté du code en plus de votre code. S'il vous plaît vérifier et laissez-moi savoir si cela suffit à votre exigence xxx


4 commentaires

Il serait préférable d'utiliser une cellule divisée (":") pour séparer les heures de minutes, sinon "5:15" pourrait vous obtenir des résultats inattendus


Quel résultat obtiendriez-vous si in est 23:55 et out est 00:05 et que vous attendriez-vous que ce soit?


@Sultuske tu as raison. J'ai réfractored le code. @ Joakim je suppose que le temps est toujours plus grand que dans le temps. Cela dépend de l'exigence de Gary. Nous pouvons ajouter une condition supplémentaire pour cela


@Sabeshrajendran 00: 005 Ce matin comme une époque est supérieur à 23:55 hier.



0
votes

Essayez ceci:

public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
   //Read data
   System.out.println("Clock In: ");
   String sTimeIn = "20:30";

   System.out.println("Clock Out: ");
   String sTimeOut = "18:20";

   // Process data
   String sHourIn = sTimeIn.substring(0, 2);
   String sMinuteIn = sTimeIn.substring(3, 5);
   String sHourOut = sTimeOut.substring(0, 2);
   String sMinuteOut = sTimeOut.substring(3, 5);

   int iHourIn = Integer.parseInt(sHourIn);
   int iMinuteIn = Integer.parseInt(sMinuteIn);
   int iHourOut = Integer.parseInt(sHourOut);
   int iMinuteOut = Integer.parseInt(sMinuteOut);

   Calendar cal = Calendar.getInstance();

   cal.set(Calendar.HOUR_OF_DAY,iHourIn);
   cal.set(Calendar.MINUTE,iMinuteIn);
   cal.set(Calendar.SECOND,0);
   cal.set(Calendar.MILLISECOND,0);
   Long timeIn = cal.getTime().getTime();

   cal.set(Calendar.HOUR_OF_DAY,iHourOut);
   cal.set(Calendar.MINUTE,iMinuteOut);
   cal.set(Calendar.SECOND,0);
   cal.set(Calendar.MILLISECOND,0);
   Long timeOut = cal.getTime().getTime();

   Long finaltime=  timeIn-timeOut;

   // Convert the result to Hours and Minutes

   Long temp = null;
   // get hours
   temp = finaltime % 3600000 ;
   int sumHour = (int) ((finaltime - temp) / 3600000 );

   finaltime = temp;

   int sumMinute = (int) (finaltime/ 60000);

   //Display Output
   System.out.println(sumHour +" Hour "+ sumMinute + " Minute");
}   


1 commentaires

Cette réponse ne gère pas la traversée de minuit, lorsque vous êtes dans> Out.



2
votes

Comme @Sultuske a dit que la bibliothèque de temps devrait être une option plus sûre, j'ai fourni un exemple ci-dessous

import java.time.LocalTime;

public class HelloWorld
{
  public static void main(String[] args)
  {
      LocalTime in = LocalTime.parse("16:00");
      LocalTime out = LocalTime.parse("01:00");

      int hOut = out.getHour(),
          hIn  = in.getHour();

      int hoursDiff = hOut < hIn ? 24 - hIn + hOut : hOut - hIn,
          minsDiff  = (int)Math.abs(out.getMinute() - in.getMinute()),
          secsDiff  = (int)Math.abs(out.getSecond() - in.getSecond());

      System.out.println(hoursDiff+":"+minsDiff+":"+secsDiff);
  }
}


2 commentaires

Cette réponse ne gère pas la traversée de minuit, lorsque vous êtes dans> Out.


@ Joakimdanielson Bon point, je ne l'ai pas pensé, la solution ci-dessous modifie devrait le résoudre.



2
votes

Si vous souhaitez utiliser localTime code> et chronounit code> CLASSE DE JAVA 8:

02:15


2 commentaires

Vous êtes sur la bonne voie. Toujours mieux utiliser la classe Durée et laissez-la faire la conversion entre heures et minutes pour vous.


Sans utiliser le formateur de date fait partie de l'exigence



1
votes

Voici ma solution suggérée, y compris une validation simple (non parfaite) de l'entrée, j'ai placé la solution à l'intérieur d'une méthode afin de demander à l'utilisateur que l'entrée n'est pas manipulée xxx


Mise à jour
Voici une solution basée sur localTime et Durée xxx


1 commentaires

@Garyhooi tout retour sur ceci?