Je veux soustraire deux périodes de temps, disons 16:00:00 de 19:00:00. Existe-t-il une fonction Java pour cela? Les résultats peuvent être en millisecondes, secondes ou minutes.
Inverser les variables ne fera pas grand-chose. Dans cet exemple, bien sûr, vous pouvez les inverser et prendre la valeur absolue ou quelque chose. Mais que se passe-t-il si vous avez minuit (00h00)?
rj2700
Qu'en est-il de 23:15:00 - 01:15:00?
Oleksandr
qu'en est-il de la différence entre 08:00:00 aujourd'hui et 10:00:00 d'hier ??????? Je ne pense pas que ce que vous suggérez soit une logique cassable.
Cela se résume donc à deux importations et System.out.println("Duration: " + String.valueOf(Duration.between(outerstart, Instant.now()).toMillis()));à enregistrer la durée. Je n'appellerais pas cela une solution agréable et propre en Java8 si d'autres langages peuvent le faire avec du code comme print("Duration: " + str(time.time()-start))...
Luc
3
La propreté @Luc n'est pas la même chose que la brièveté. Ce qui se passe exactement dans la version Java 8 est beaucoup plus clair, et il est également beaucoup plus facile de modifier si, par exemple, vous souhaitez rapporter la durée entre deux instants dans une unité autre que les millisecondes, ou sous forme d'unités multiples (par exemple 1h 15m 3.022sau lieu de 4503022 milliseconds) .
JakeRobb
40
POUR obtenir de jolies différences de timing, alors
Ceci est également disponible pour Java SE 6 et 7 en tant que port arrière , ainsi que pour Android .
Bryan
11
Comme toute autre langue; convertissez vos périodes de temps en un horodatage Unix (c'est-à-dire, secondes depuis l'époque Unix), puis soustrayez simplement. Ensuite, les secondes résultantes doivent être utilisées comme un nouvel horodatage unix et lues formatées dans le format souhaité.
Ah, donnez à l'affiche ci-dessus (genesiss) son crédit, le code est toujours à portée de main;) Cependant, vous avez maintenant une explication :)
import java.util.Date;...Date d1 =newDate();......Date d2 =newDate();System.out.println(d2.getTime()-d1.getTime());//gives the time difference in milliseconds. System.out.println((d2.getTime()-d1.getTime())/1000);//gives the time difference in seconds.
et, pour afficher dans un format plus agréable, vous pouvez utiliser:
Cela duplique une autre réponse et n'ajoute aucun nouveau contenu. Veuillez ne pas publier de réponse à moins que vous n'ayez quelque chose de nouveau à apporter.
DavidPostill
@DavidPostill, merci pour votre attention. Mais la solution dont j'avais besoin de moi-même et que je n'ai pas trouvée dans le post de GENESIS était le décalage horaire entre l'exécution de deux lignes de code (comme le point de départ et le point de fin du programme ou avant et après l'exécution d'une méthode, pas des temps statiques) . J'ai pensé que cela pourrait aider.
Alisa
2
La manière douloureuse est de convertir en millis et de faire la soustraction, puis de revenir à quelques secondes environ. La meilleure façon est d'utiliser JodaTime .
Je n'ai jamais mentionné les horodatages Unix. C'est également un fait bien connu que l'API Java Date and Time est nul pour une utilisation plus qu'occasionnelle. JodaTime est bien meilleur et probablement la voie à suivre jusqu'à ce que JSR 310 fasse partie de Java. sourceforge.net/apps/mediawiki/threeten/…
Manfred Moser
@Manfred Moser: vous devriez peut-être ... Les classes de temps Java par défaut et Joda donnent une heure en millis qui part de ce qu'on appelle l' époque Unix . À ce stade, ils deviennent très proches des horodatages Unix (l'un étant en millis, l'autre en secondes). Dans tous les cas, ce que l'OP veut peut être fait de manière triviale en utilisant les classes Java par défaut, en prenant le nombre de millis depuis l' époque Unix et en les soustrayant.
SyntaxeT3rr0r
1
Bien sûr, cela peut être fait de manière triviale. Et si vous faites beaucoup de calculs de date et d'heure dans votre application, vous pouvez également créer vous-même de nombreux bogues et réinventer votre propre petite bibliothèque en implémentant à nouveau des parties de JodaTime. Pour un calcul simple, cela peut convenir, mais pour une utilisation fréquente, il vaut la peine d'utiliser une bibliothèque décente. J'essaie juste de souligner que la première solution simple pourrait ne pas vous conduire sur la meilleure voie. Qu'est-ce qui ne va pas avec ça?
Manfred Moser
3
@Manfred Moser: En fait, la première solution simple est le bon chemin, étant donné que l'OP a demandé la différence entre deux périodes de temps, pas les changements d'une horloge atomique :)
Christian
Bien sûr .. pour cet exemple et question spécifique uniquement. Pas pour une vue d'ensemble cependant.
Outre l'approche la plus courante avec les objets Période et Durée, vous pouvez élargir vos connaissances avec une autre façon de gérer le temps en Java.
Bibliothèques Java 8 avancées.
ChronoUnit pour les différences.
ChronoUnit est un excellent moyen de déterminer la distance entre deux valeurs temporelles. Temporal inclut LocalDate , LocalTime et ainsi de suite.
LocalTime one =LocalTime.of(5,15);LocalTime two =LocalTime.of(6,30);LocalDate date =LocalDate.of(2019,1,29);System.out.println(ChronoUnit.HOURS.between(one, two));//1System.out.println(ChronoUnit.MINUTES.between(one, two));//75System.out.println(ChronoUnit.MINUTES.between(one, date));//DateTimeException
Le premier exemple montre qu'entre les tronçons plutôt que les arrondis.
La seconde montre à quel point il est facile de compter différentes unités.
Et le dernier exemple nous rappelle qu'il ne faut pas jouer avec les dates et les heures en Java :)
Date start =newDate();//Waiting for 10 secondsThread.sleep(10000);Date end =newDate();long diff = end.getTime()- start.getTime();StringTimeTaken=String.format("[%s] hours : [%s] mins : [%s] secs",Long.toString(TimeUnit.MILLISECONDS.toHours(diff)),TimeUnit.MILLISECONDS.toMinutes(diff),TimeUnit.MILLISECONDS.toSeconds(diff));System.out.println(String.format("Time taken %s",TimeTaken));
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.
Réponses:
La différence est en millisecondes.
J'ai modifié le message de sfaizs .
la source
Java 8 a une solution plus propre - Instantanée et Durée
Exemple:
la source
System.out.println("Duration: " + String.valueOf(Duration.between(outerstart, Instant.now()).toMillis()));
à enregistrer la durée. Je n'appellerais pas cela une solution agréable et propre en Java8 si d'autres langages peuvent le faire avec du code commeprint("Duration: " + str(time.time()-start))
...1h 15m 3.022s
au lieu de4503022 milliseconds
) .POUR obtenir de jolies différences de timing, alors
la source
Java 8
la source
Comme toute autre langue; convertissez vos périodes de temps en un horodatage Unix (c'est-à-dire, secondes depuis l'époque Unix), puis soustrayez simplement. Ensuite, les secondes résultantes doivent être utilisées comme un nouvel horodatage unix et lues formatées dans le format souhaité.
Ah, donnez à l'affiche ci-dessus (genesiss) son crédit, le code est toujours à portée de main;) Cependant, vous avez maintenant une explication :)
la source
et, pour afficher dans un format plus agréable, vous pouvez utiliser:
la source
La manière douloureuse est de convertir en millis et de faire la soustraction, puis de revenir à quelques secondes environ. La meilleure façon est d'utiliser JodaTime .
la source
lève l'exception gère l'analyse des exceptions
la source
Outre l'approche la plus courante avec les objets Période et Durée, vous pouvez élargir vos connaissances avec une autre façon de gérer le temps en Java.
Bibliothèques Java 8 avancées. ChronoUnit pour les différences.
ChronoUnit est un excellent moyen de déterminer la distance entre deux valeurs temporelles. Temporal inclut LocalDate , LocalTime et ainsi de suite.
Le premier exemple montre qu'entre les tronçons plutôt que les arrondis.
La seconde montre à quel point il est facile de compter différentes unités.
Et le dernier exemple nous rappelle qu'il ne faut pas jouer avec les dates et les heures en Java :)
la source
Une option alternative si l'heure de différents jours est prise, par exemple: 22h00 et 01h55.
la source
Maintenant, les minutes seront la durée correcte entre deux heures (en minutes).
la source
}
la source
Essaye ça:
la source
la source
J'ai trouvé cela plus propre.
la source
la source
class TimeCalculator {String updateTime;
la source