Comment calculer la différence de temps entre deux dates à l'aide de LocalDateTime dans Java 8?
Il y a de nombreuses réponses, mais je suis incapable de trouver compatible avec ma situation. J'ai besoin de trouver la différence de 8 heures dans le temps ainsi que sur le changement de date trop. Comme si le temps est de plus de 8 heures, puis de ne pas exécuter quelque chose .
Nous n'avons aucune méthode permettant d'obtenir les mêmes dans LocalDateTime
dans Java 8?
J'ai essayé d'utiliser la suite, mais l'impossibilité d'atteindre le même.
LocalDateTime fromDateTime = LocalDateTime.of(2017, 07, 07, 07, 00, 55);
LocalDateTime toDateTime = LocalDateTime.now();
LocalDateTime tempDateTime = LocalDateTime.from(fromDateTime);
long years = tempDateTime.until(toDateTime, ChronoUnit.YEARS);
tempDateTime = tempDateTime.plusYears(years);
long months = tempDateTime.until(toDateTime, ChronoUnit.MONTHS);
tempDateTime = tempDateTime.plusMonths(months);
long days = tempDateTime.until(toDateTime, ChronoUnit.DAYS);
tempDateTime = tempDateTime.plusDays(days);
long hours = tempDateTime.until(toDateTime, ChronoUnit.HOURS);
tempDateTime = tempDateTime.plusHours(hours);
long minutes = tempDateTime.until(toDateTime, ChronoUnit.MINUTES);
tempDateTime = tempDateTime.plusMinutes(minutes);
long seconds = tempDateTime.until(toDateTime, ChronoUnit.SECONDS);
System.out.println("" + java.time.Duration.between(tempDateTime, toDateTime).toHours());
System.out.println(years + " years "
+ months + " months "
+ days + " days "
+ hours + " hours "
+ minutes + " minutes "
+ seconds + " seconds.");
Il est difficile de vérifier l'heure et la date séparément.
Au départ, j'ai codé il l'aime mais il ne semble correct:
return openBrat!=null
&& openBrat.until(LocalDateTime.now(), ChronoUnit.DAYS) == 0 &&
openBrat.until(LocalDateTime.now(), ChronoUnit.HOURS) >= 8
&& openBrat.until(LocalDateTime.now(), ChronoUnit.Minutes) >= 0;
Quelqu'un pourrait s'il vous plaît suggérer comment soustraire comme:
2017 07 06 23:30:00 - 2017 07 07 01:30:00 - Should return 2 hours.
Vous pouvez également utiliser
Savez-vous que
Double Possible de Java 8: Calculer la différence entre deux LocalDateTime
ChronoUnit.HOURS.between(date1, date2)
Savez-vous que
LocalDateTime
délibérément n'a pas de notion de fuseau horaire? Donc, en utilisant cette classe signifie que vous serez en ignorant toutes les anomalies telles que l'Heure d'été (DST). Si vous voulez en compte de ces réalités, l'utilisation ZonedDateTime
.Double Possible de Java 8: Calculer la différence entre deux LocalDateTime
OriginalL'auteur Harpreet | 2017-07-07
Vous devez vous connecter pour publier un commentaire.
Les épreuves suivantes
2
, tout comme vous le souhaitez.Il n'y a rien de mal avec votre code. Si vous n'obtenez pas les résultats que vous attendez, vous pouvez avoir besoin de vérifier si votre attente est correcte.
De faire quelque chose lorsque la différence est inférieure à 8 heures, vous pouvez faire quelque chose comme ceci:
Donc, juste obtenir la durée en secondes ou millisecondes, ou tout ce que vous avez besoin, et de vérifier si elle est de plus de 8 heures de dollars de secondes ou millisecondes, etc.).
Mise à jour de ma réponse avec un peu de code supplémentaire
OriginalL'auteur Robin Topper
Ma compréhension est que vous voulez obtenir de la différence entre ces 2 dates et les "casser" en termes de nombre d'heures, de minutes et de secondes de cette différence.
Vous pouvez utiliser le
Duration
classe comme déjà expliqué. Mais leDuration
calcule la différence en quelques secondes et nanosecondes, de sorte que vous aurez à faire quelques calculs pour obtenir ce nombre de secondes dans des champs distincts:En Java 9 et les versions ultérieures, vous pouvez appeler le nouveau
Duration::to…Part
méthodes pour obtenir le nombre de jours, d'heures, de minutes ou de secondes plutôt que de calculer le nombre de vous-même.La sortie sera:
Et les variables
hours
,minutes
etseconds
aura les valeurs respectives de7
,30
et55
. Si vous aussi vous voulez le nanosecondes, il suffit d'appelerduration.getNano()
pour obtenir la valeur correspondante (dans l'exemple ci-dessus, il est0
).Si je test avec des valeurs différentes:
Le résultat sera:
Si vous voulez juste la différence en heures, vous pouvez utiliser:
Vous pouvez éventuellement utiliser
Math.abs
pour éviter les valeurs négatives.Ce sera le retour de la différence en heures, en ignorant le reste des minutes et des secondes: dans le premier exemple (
d2 = LocalDateTime.of(2017, 7, 7, 7, 0, 55)
) il sera de retour7
et dans le deuxième exemple (d2 = LocalDateTime.of(2017, 7, 7, 1, 30, 0)
) il sera de retour2
.OriginalL'auteur