Je veux calculer l'heure de la différence de temps et la minute l'utilisateur doit être
La sortie attendue doit être quelque chose comme mais comment puis-je les calculer? p> } p> 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 22hour (s) 0 minute (s) code>. La sortie doit être 02 heure (s) 0 minute (s) code>. P>
5 Réponses :
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
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 code> et out est 00:05 code> 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.
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");
}
Cette réponse ne gère pas la traversée de minuit, lorsque vous êtes dans> Out.
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);
}
}
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.
Si vous souhaitez utiliser localTime code> et chronounit code> CLASSE DE JAVA 8: 02:15
Vous êtes sur la bonne voie. Toujours mieux utiliser la classe Code> Durée Code> et laissez-la faire la conversion entre heures et minutes pour vous.
Sans utiliser le formateur de date fait partie de l'exigence
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 Mise à jour forte>
Voici une solution basée sur localTime code> et Durée code> p>
@Garyhooi tout retour sur ceci?
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 code> est notoirement gênant et longtemps obsolète, la classelocalTime code> 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 code>.