Maison > Java > javaDidacticiel > Comment Java 8 peut-il calculer avec précision les différences temporelles entre deux dates locales, en gérant les valeurs négatives ?

Comment Java 8 peut-il calculer avec précision les différences temporelles entre deux dates locales, en gérant les valeurs négatives ?

Mary-Kate Olsen
Libérer: 2024-12-08 05:55:11
original
358 Les gens l'ont consulté

How Can Java 8 Accurately Calculate Temporal Differences Between Two LocalDates, Handling Negative Values?

Java 8 : Détermination des différences temporelles entre deux LocalDates

Calcul de la différence entre deux objets LocalDateTime, exprimée en années, mois, jours, heures , les minutes et les secondes peuvent être une tâche complexe. Une approche consiste à utiliser les classes Period et Duration introduites dans Java 8. Cependant, si la différence implique des valeurs négatives, comme le démontre votre code, cela peut conduire à des résultats incorrects.

Le problème

Votre code calcule la période entre les deux dates, représentant les années, les mois et les jours. Il calcule ensuite le décalage horaire en secondes et convertit ces secondes en heures, minutes et secondes. Cependant, il ne tient pas compte des valeurs négatives qui peuvent survenir lorsque la date « du » est supérieure à la date « jusqu'à ».

La solution

Pour répondre ce problème, nous pouvons utiliser l'énumération ChronoUnit pour déterminer directement le décalage horaire. ChronoUnit fournit un moyen pratique de calculer des unités temporelles, telles que les minutes et les heures, entre deux objets LocalDateTime.

Voici le code mis à jour à l'aide de ChronoUnit :

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

public class Main {

    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);

        long years = ChronoUnit.YEARS.between(fromDateTime, toDateTime);
        long months = ChronoUnit.MONTHS.between(fromDateTime, toDateTime);
        long days = ChronoUnit.DAYS.between(fromDateTime, toDateTime);
        long hours = ChronoUnit.HOURS.between(fromDateTime, toDateTime);
        long minutes = ChronoUnit.MINUTES.between(fromDateTime, toDateTime);
        long seconds = ChronoUnit.SECONDS.between(fromDateTime, toDateTime);

        System.out.println(years + " years " + months + " months " + days + " days " +
                hours + " hours " + minutes + " minutes " + seconds + " seconds.");
    }
}
Copier après la connexion

Avec cette modification, votre code devrait calculer avec précision la différence temporelle entre les deux objets LocalDateTime.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal