Java 8: Calculer la différence entre deux ZonedDateTime
Je suis en train d'écrire une méthode pour imprimer la différence de temps entre deux ZonedDateTimes, concernant la différence entre les fuseaux horaires.
J'ai trouvé des solutions, mais tous ont été écrits pour travailler avec LocalDateTime.
- Poster un exemple concret de ce que vous voulez atteindre, et obtenir comme résultat.
- Michał la réponse est exactement ce que j'attendais. Merci beaucoup!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la méthode entre de ChronoUnit.
Cette méthode convertit ces moments-là pour la même zone (zone du premier argument) et après que, invoque jusqu'à méthode déclarée dans Temporelle interface:
Depuis deux ZonedDateTime et LocalDateTime implémente Temporelle interface, vous pouvez écrire aussi de méthode universelle pour les date-heure de types:
Mais gardez à l'esprit, que l'invocation de cette méthode mixte LocalDateTime et ZonedDateTime conduit à DateTimeException.
Espérons que cela aide.
tl;dr
Pendant des heures, minutes, secondes:
Pendant des années, des mois, des jours:
Détails
La Réponse par Michal S est correct, montrant
ChronoUnit
.Duration
&Period
Une autre voie est la
Durée
etDélai
classes. Utiliser le premier pour de courtes périodes de temps (heures, minutes, secondes), le second pour le plus de temps (années, mois, jours).De produire une Chaîne en la norme ISO 8601 en appelant
toString
. Le format estPnYnMnDTnHnMnS
où laP
marque le début et laT
sépare les deux parties.En Java 9 et plus tard, appel de la
to…Part
méthodes pour obtenir les composants individuels. Discuté dans une autre Réponse de la mine.Exemple de code
Voir code en direct en IdeOne.com.
Interval
&LocalDateRange
La ThreeTen-Extra projet ajoute des fonctionnalités à la java.les classes de temps. L'un de ses pratique des classes est
Intervalle
pour représenter un laps de temps comme une paire de points sur la timeline. Un autre estLocalDateRange
, pour une paire deLocalDate
objets. En revanche, laPeriod
&Duration
classes représentent chacun un laps de temps que pas attaché à la timeline.L'usine méthode pour
Interval
prend une paire deInstant
objets.Vous pouvez obtenir un
Duration
à partir d'unInterval
.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.of
méthode sur la Durée que prend deux instants? Je ne voispublic static Duration of(long amount, TemporalUnit unit)
.of
avec.between
. Merci.