Classe Java Period
PeriodLa classe fait partie de l'API date-time introduite en Java 8, située dansjava.timele package.
La classe Period est principalement utilisée pour représenter l'intervalle de temps entre deux dates, en unités d'années, de mois et de jours. Contrairement àDurationclasse (qui représente des intervalles temporels tels que les heures, les minutes et les secondes),Periodelle se concentre sur les différences au niveau de la date.
Fonctionnalités principales
1. Immuabilité
PeriodLa classe est immuable, ce qui signifie qu'une fois qu'unPeriodobjet est créé, sa valeur ne peut pas être modifiée. ToutePeriodopération (telle que l'addition ou la soustraction) renverra une nouvellePeriodinstance.
2. Calculs basés sur les dates
PeriodElle est spécifiquement utilisée pour les calculs impliquant des années, des mois et des jours, ce qui la rend adaptée à des scénarios tels que les anniversaires et les durées de contrat.
3. Intégration avec LocalDate
PeriodElle est généralement utilisée avec laLocalDateclasse permettant de calculer la différence entre deux dates ou d'ajouter/soustraire une période de temps à/à partir d'une date.
Méthodes courantes
Création d'objets Period
1. Utilisation deof()method
Exemple
2. Utilisation debetween()méthode pour calculer l'intervalle entre deux dates
Exemple
LocalDate endDate = LocalDate.of(2021, 3, 4);
Period period = Period.between(startDate, endDate);
3. Utilisation deparse()méthode pour créer à partir d'une chaîne
Exemple
Obtention des composants d'un Period
Exemple
int months = period.getMonths(); // Obtenir le nombre de mois
int days = period.getDays(); // Obtenir le nombre de jours
Opérations
1. Opérations d'addition et de soustraction
Exemple
Period subtracted = period.minusDays(5);
2. Déterminer s'il est négatif
Exemple
3. Normaliser le Period
Exemple
Exemples d'applications pratiques
Calcul de l'intervalle entre deux dates
Exemple
LocalDate currentDate = LocalDate.now();
Period age = Period.between(birthDate, currentDate);
System.out.printf("Âge : %d ans %d mois %d jours",
age.getYears(), age.getMonths(), age.getDays());
Ajouter une Period à une date
Exemple
Period twoMonths = Period.ofMonths(2);
LocalDate futureDate = today.plus(twoMonths);
Vérifier si la période est zéro
Exemple
if (zeroPeriod.isZero()) {
System.out.println("Il s'agit d'une période zéro");
}
Exemple complet
Exemple
import java.time.LocalDate;
public class PeriodDemo {
public static void main(String[] args) {
// Plusieurs façons de créer des objets Period
// 1. Utilisation de la méthode of()
Period period1 = Period.of(1, 2, 15); // 1 an 2 mois 15 jours
System.out.println("Période 1 : " + period1);
// 2. Utilisation de la méthode between() pour calculer la période entre deux dates
LocalDate startDate = LocalDate.of(2020, 1, 1);
LocalDate endDate = LocalDate.of(2023, 5, 15);
Period period2 = Period.between(startDate, endDate);
System.out.println("Période entre les dates : " + period2);
// 3. Utilisation de la méthode parse() pour créer à partir d'une chaîne
Period period3 = Period.parse("P1Y2M15D"); // format ISO-8601
System.out.println("Période analysée : " + period3);
}
}
La sortie est :
Period 1: P1Y2M15D Period between dates: P3Y4M14D Parsed Period: P1Y2M15D
Notes
- Problèmes de précision:
PeriodIl calcule uniquement les différences en années, mois et jours, en ignorant les différences de temps (heures, minutes, etc.). - Valeur négative: Si la date de fin est antérieure à la date de début,
Period.between()une valeur négative sera renvoyée. - Différences du nombre de jours par mois:
PeriodLe calcul tient compte du nombre variable de jours selon les mois (par exemple, février compte 28 ou 29 jours). - Format ISO-8601: Lors de l'utilisation de la
parse()méthode, la chaîne doit suivre lePnYnMnDformat (par exemple, "P1Y2M3D").
Résumé
PeriodLa classe est un outil puissant pour gérer les intervalles basés sur des dates dans l'API date-heure de Java. Grâce à elle, les développeurs peuvent effectuer commodément des calculs de dates au niveau de l'année, du mois et du jour, ce qui la rend particulièrement adaptée aux scénarios métier nécessitant une précision au niveau de la date. MaîtriserPeriodl'utilisation de cette classe peut rendre votre code de gestion des dates plus concis et plus lisible.