J'essaie d'écrire une méthode pour imprimer la différence de temps entre deux ZonedDateTime , en ce qui concerne la différence entre les fuseaux horaires.
J'ai trouvé des solutions, mais toutes ont été écrites pour fonctionner avec LocalDateTime .
J'essaie d'écrire une méthode pour imprimer la différence de temps entre deux ZonedDateTime , en ce qui concerne la différence entre les fuseaux horaires.
J'ai trouvé des solutions, mais toutes ont été écrites pour fonctionner avec LocalDateTime .
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 Temporelles de l'interface:
static long zonedDateTimeDifference(ZonedDateTime d1, ZonedDateTime d2, ChronoUnit unit){
return unit.between(d1, d2);
}
Depuis deux ZonedDateTime et LocalDateTime met en œuvre Temporelle de l'interface, vous pouvez écrire aussi de méthode universelle pour les date-heure de types:
static long dateTimeDifference(Temporal d1, Temporal d2, ChronoUnit unit){
return unit.between(d1, d2);
}
Mais gardez à l'esprit, que l'invocation de cette méthode mixte LocalDateTime et ZonedDateTime conduit à DateTimeException.
Espérons que cela aide.
Pendant des heures, minutes, secondes:
Duration.between( zdtA , zdtB ) // Represent a span-of-time in terms of days (24-hour chunks of time, not calendar days), hours, minutes, seconds. Internally, a count of whole seconds plus a fractional second (nanoseconds).
Pendant des années, des mois, des jours:
Period.between( // Represent a span-of-time in terms of years-months-days.
zdtA.toLocalDate() , // Extract the date-only from the date-time-zone object.
zdtB.toLocalDate()
)
La Réponse par Michal S est correcte, montrant ChronoUnit
.
Duration
& Period
Une autre voie est l' Duration
et Period
les 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).
Duration d = Duration.between( zdtA , zdtB );
Produire une Chaîne de caractères dans la norme ISO 8601 en appelant toString
. Le format est - PnYnMnDTnHnMnS
où l' P
marque le début et T
sépare les deux parties.
String output = d.toString();
En Java 9 et plus tard, appel de l' to…Part
méthodes pour obtenir les composants individuels. Discuté dans une autre Réponse de la mine.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtStart = ZonedDateTime.now( z );
ZonedDateTime zdtStop = zdtStart.plusHours( 3 ).plusMinutes( 7 );
Duration d = Duration.between( zdtStart , zdtStop );
2016-12-11T03:07:50.639-05:00[America/Montreal]/2016-12-11T06:14:50.639-05:00[America/Montreal]
PT3H7M
Voir le code en direct en IdeOne.com.
Interval
& LocalDateRange
Le ThreeTen-Extra projet ajoute des fonctionnalités à la java.les classes de temps. L'un de ses pratique des classes est - Interval
pour représenter un laps de temps comme une paire de points sur la timeline. Un autre est - LocalDateRange
, pour une paire de LocalDate
objets. En revanche, l' Period
& Duration
classes représentent chacun un laps de temps que pas attaché à la timeline.
La méthode de factorisation pour Interval
prend une paire de Instant
objets.
Interval interval = Interval.of( zdtStart.toInstant() , zdtStop.toInstant() );
Vous pouvez obtenir un Duration
d'un Interval
.
Duration d = interval.toDuration();
Le java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieil héritage de la date-l'heure des classes d' java.util.Date
, Calendar
, & SimpleDateFormat
.
Le Joda-Time , qui est maintenant en mode de maintenance, conseille la migration à la java.du temps des classes.
Pour en savoir plus, voir l' Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification JSR 310.
Vous pouvez échanger java.le temps des objets directement avec votre base de données. L'utilisation d'un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin d' java.sql.*
les classes.
Où obtenir le java.les classes de temps?
Le 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 Interval
, YearWeek
, YearQuarter
, et plus.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.