Maison >Java >javaDidacticiel >Comment calculer avec précision la différence de temps entre deux instances Java LocalDateTime ?

Comment calculer avec précision la différence de temps entre deux instances Java LocalDateTime ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-04 19:10:14230parcourir

How to Accurately Calculate the Time Difference Between Two Java LocalDateTime Instances?

Calcul de la différence de temps entre les instances LocalDateTime

Dans Java 8, le calcul de la différence entre deux instances LocalDateTime peut être réalisé à l'aide des classes Period et Duration . Cependant, votre code est actuellement confronté à quelques inexactitudes.

Analyse du code d'origine

Votre code utilise la classe Period pour calculer les années, les mois et les jours entre les deux instances LocalDateTime. . Pour le décalage horaire, vous convertissez les instances en LocalDateTime avec uniquement les composants temporels et calculez la différence en utilisant Duration.

Le problème se pose car votre calcul de temps suppose que fromDateTime est avant toDateTime. Si les dates sont dans le désordre, des nombres négatifs en résulteront, conduisant à des valeurs de temps incorrectes.

Algorithme amélioré utilisant ChronoUnit

Une approche plus robuste consiste à utiliser l'énumération ChronoUnit. pour calculer le décalage horaire. Voici la partie améliorée de votre code :

long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime);
long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime);

ChronoUnit fournit un ensemble d'unités prédéfinies qui calculent avec précision la différence entre deux instances DateTime. En spécifiant l'unité en HEURES ou en MINUTES, le décalage horaire peut être obtenu dans l'unité souhaitée sans avoir besoin de conversions manuelles ni de gestion de valeurs négatives.

Exemple mis à jour

Grâce à la méthode ChronoUnit, le code calculera alors correctement la différence entre les instances LocalDateTime d'entrée, quelle que soit leur commander :

LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45);
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);
long years = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getYears();
long months = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getMonths();
long days = Period.between(fromDateTime.toLocalDate(), toDateTime.toLocalDate()).getDays();
long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime);
long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime);
System.out.println(years + " years " + months + " months " + days + " days " + hours + " hours " + minutes + " minutes.");

Ce code calcule correctement le décalage horaire comme "29 ans 8 mois 24 jours 12 heures 0 minutes."

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn