Maison >Java >javaDidacticiel >Comment calculer avec précision la différence de temps entre deux instances Java LocalDateTime ?
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!