Maison >Java >javaDidacticiel >Comment Java 8 peut-il calculer avec précision la différence entre deux instances LocalDateTime en années, mois, jours, heures et minutes ?

Comment Java 8 peut-il calculer avec précision la différence entre deux instances LocalDateTime en années, mois, jours, heures et minutes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-15 12:46:12162parcourir

How Can Java 8 Accurately Calculate the Difference Between Two LocalDateTime Instances in Years, Months, Days, Hours, and Minutes?

Java 8 : Calculer la différence entre deux instances LocalDateTime dans plusieurs unités

Le calcul de la différence entre deux instances LocalDateTime dans différentes unités de temps peut présenter défis. Une approche consiste à exploiter les classes Période et Durée introduites dans Java 8.

Défis liés à la mise en œuvre initiale

Le code fourni tente de calculer la différence en combinant Période ( qui gère les années, les mois et les jours) et Durée (qui gère les heures, les minutes et les secondes). Cependant, il existe quelques incohérences dans le calcul :

  • La méthode getTime calcule de manière incorrecte les différences horaires après des mois.
  • Les valeurs de temps négatives signalées pour certaines paires date-heure indiquent un problème avec gérer les différences négatives.

Calcul amélioré

Pour garantir une précision Pour les calculs, envisagez d'utiliser l'énumération ChronoUnit, qui fournit des méthodes pour extraire des unités de temps spécifiques à partir de dates et d'heures. Voici une version améliorée :

import java.time.ChronoUnit;
import java.time.LocalDateTime;
import java.time.Period;

public class CalculateLocalDateTimeDifference {

    public static void main(String[] args) {
        LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 9, 19, 46, 45);
        LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);

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

        System.out.println(period.getYears() + " years " +
                period.getMonths() + " months " +
                period.getDays() + " days " +
                hours + " hours " +
                minutes + " minutes.");
    }
}

Explication

  • Period.between calcule la différence en années, mois et jours jusqu'aux moments spécifiés dans le temps .
  • ChronoUnit.MINUTES.between extrait le décalage horaire en minutes entre les deux LocalDateTime instances.
  • De même, ChronoUnit.HOURS.between obtient la différence en heures.

Cet algorithme amélioré fournit des résultats précis pour les différences de temps positives et négatives.

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