La plupart des idiomatiques l'impression d'une différence de temps en Java?
Je suis familier avec l'impression de la différence de temps en millisecondes:
long time = System.currentTimeMillis();
//do something that takes some time...
long completedIn = System.currentTimeMillis() - time;
Mais, est-il un bon moyen de l'impression d'un temps complet dans un format spécifié (par exemple: HH:MM:SS) soit à l'aide d'Apache Commons ou encore le redoutable plate-forme de l'API de la Date/Heure des objets? En d'autres termes, quel est le plus court, plus simple, pas de bêtises façon d'écrire une format de l'heure dérivé de millisecondes en Java?
Devrait être
System.currentTimeMillis() - time;
.
OriginalL'auteur Zombies | 2010-04-24
Vous devez vous connecter pour publier un commentaire.
Apache Commons a la DurationFormatUtils classe pour appliquer un format particulier pour une durée de temps. Donc, quelque chose comme:
Ou utiliser la quasi identiques, intégré dans DurationFormatUtils.formatDurationHMS(fin-début);
de satisfaire l'exemple donné dans la question, mais j'ai ajouté les millisecondes dans ma solution.
yep! Bien que
formatDurationHMS
ne correspondait pas aux exigences que c'estH:m:s
et pasHH:mm:ss
, mais je voulais juste le signaler comme une possibilité.OriginalL'auteur Bill the Lizard
Une bibliothèque conçue pour le but est la meilleure approche, mais
SimpleDateFormat
avec le droitTimeZone
peut suffire pour des périodes de moins d'une journée. De plus longues périodes nécessitent le traitement de la journée spéciale.Sortie de la Console:
OriginalL'auteur trashgod
tl;dr
...ou...
ISO 8601
La ISO 8601 norme définit les formats textuels pour la date-heure de valeurs. Ces formats sont, en effet, à court, simple, et aucun-non-sens. Ils sont en grande partie lisible par l'homme à travers les différentes cultures, pratiques, et sans ambiguïté.
Pour des intervalles de temps hors de la chronologie, le format standard est
PnYnMnDTnHnMnS
. LeP
marque le début et laT
sépare les ans-mois-jours à compter de la heures-minutes-secondes. Donc une heure et demi, c'estPT1H30M
.java.time.Duration
La java.les classes de temps prévoir une paire de classes pour représenter des intervalles de temps. Le
Durée
classe pendant des heures-minutes-secondes, etPeriod
.Instant
La
Instantané
classe représente un moment dans le scénario de UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.OriginalL'auteur Basil Bourque
Si vous voulez vraiment voir un millième de seconde de différence, je ne pense pas qu'il y a un plus court, plus simple.
Si vous avez besoin d'un plus puissant (mais certainement pas la plus simple façon de recueillir des statistiques de performances, il est Perf4J.
OriginalL'auteur Michael Borgwardt
Pas à ma connaissance. Mais printf() pouvez le faire facilement si vous calculez les valeurs de H, M et S, et d'utiliser un %02 modèle pour chacun.
OriginalL'auteur Thorbjørn Ravn Andersen
OriginalL'auteur Dmitry Podobedov