Java Period-Klasse

PeriodDie Klasse ist Teil der in Java 8 eingeführten Datum-Zeit-API und befindet sich injava.timedem Paket.

Die Klasse Period wird hauptsächlich verwendet, um das Zeitintervall zwischen zwei Datumsangaben in Einheiten von Jahren, Monaten und Tagen darzustellen. Anders als dieDurationKlasse (die zeitbasierte Intervalle wie Stunden, Minuten und Sekunden repräsentiert),Periodkonzentriert sie sich auf Unterschiede auf Datumsebene.


Kernfunktionen

1. Unveränderlichkeit

PeriodDie Klasse ist unveränderlich, was bedeutet, dass, sobald einPeriodObjekt erstellt wurde, sein Wert nicht geändert werden kann. JedePeriodOperation (wie Addition oder Subtraktion) gibt eine neuePeriodInstanz zurück.

2. Datumsbasierte Berechnungen

PeriodSie wird speziell für Berechnungen mit Jahren, Monaten und Tagen verwendet und eignet sich daher für Szenarien wie Geburtstage und Vertragslaufzeiten.

3. Integration mit LocalDate

PeriodSie wird üblicherweise mit derLocalDateKlasse zur Berechnung der Differenz zwischen zwei Datumsangaben oder zum Addieren/Subtrahieren eines Zeitraums zu/von einem Datum.


Häufige Methoden

Erstellen von Period-Objekten

1. Verwendungof()method

Beispiel

Period period = Period.of(1, 2, 3); // 1 Jahr 2 Monate 3 Tage

2. Verwendungbetween()Methode zur Berechnung des Intervalls zwischen zwei Datumsangaben

Beispiel

LocalDate startDate = LocalDate.of(2020, 1, 1);
LocalDate endDate = LocalDate.of(2021, 3, 4);
Period period = Period.between(startDate, endDate);

3. Verwendungparse()Methode zum Erstellen aus einer Zeichenkette

Beispiel

Period period = Period.parse("P1Y2M3D"); // ISO-8601-Format

Abrufen der Komponenten eines Period-Objekts

Beispiel

int years = period.getYears();  // Anzahl der Jahre abrufen
int months = period.getMonths(); // Anzahl der Monate abrufen
int days = period.getDays();    // Anzahl der Tage abrufen

Operationen

1. Additions- und Subtraktionsoperationen

Beispiel

Period added = period.plusYears(1).plusMonths(2);
Period subtracted = period.minusDays(5);

2. Feststellen, ob er negativ ist

Beispiel

boolean isNegative = period.isNegative();

3. Periode normalisieren

Beispiel

Period normalized = period.normalized(); // Monate über 12 in Jahre umwandeln

Praktische Anwendungsbeispiele

Berechnung des Intervalls zwischen zwei Datumsangaben

Beispiel

LocalDate birthDate = LocalDate.of(1990, 5, 15);
LocalDate currentDate = LocalDate.now();
Period age = Period.between(birthDate, currentDate);
System.out.printf("Alter: %d Jahre %d Monate %d Tage",
    age.getYears(), age.getMonths(), age.getDays());

Hinzufügen eines Zeitraums zu einem Datum

Beispiel

LocalDate today = LocalDate.now();
Period twoMonths = Period.ofMonths(2);
LocalDate futureDate = today.plus(twoMonths);

Prüfen, ob der Zeitraum null ist

Beispiel

Period zeroPeriod = Period.of(0, 0, 0);
if (zeroPeriod.isZero()) {
    System.out.println("Dies ist ein Null-Zeitraum");
}

Umfassendes Beispiel

Beispiel

import java.time.Period;
import java.time.LocalDate;

public class PeriodDemo {
    public static void main(String[] args) {
        // Mehrere Möglichkeiten, Period-Objekte zu erstellen
       
        // 1. Verwendung der of()-Methode
        Period period1⟦Period. = Period.of(1, 2, 15); // 1 Jahr 2 Monate 15 Tage
        System.out.println("Zeitraum 1: " + period1);
       
        // 2. Verwendung der between()-Methode zur Berechnung des Zeitraums zwischen zwei Datumsangaben
        LocalDate startDate = LocalDate.of(2020, 1, 1);
        LocalDate endDate = LocalDate.of(2023, 5, 15);
        Period period2 = Period.⟦⟧betweenbetween(startDate, endDate);
        System.out.println("Zeitraum zwischen Daten: " + period2);
       
        // 3. Verwendung der of()-Methode zum Erstellen aus einer Zeichenkette
        Period period3 = Period.⟦⟧// ISO-8601-Format("P1Y2M15D"); // ISO-8601 format
        System.out.println("Geparster Zeitraum: " + period3);
    }
}

Die Ausgabe ist:

Period 1: P1Y2M15D
Period between dates: P3Y4M14D
Parsed Period: P1Y2M15D

Hinweise

  1. Genauigkeitsprobleme:PeriodEs berechnet nur Unterschiede in Jahren, Monaten und Tagen und ignoriert Unterschiede in der Zeit (Stunden, Minuten usw.).
  2. Umgang mit negativen Werten: Wenn das Enddatum früher als das Startdatum liegt,Period.between()wird ein negativer Wert zurückgegeben.
  3. Unterschiede bei der Anzahl der Tage pro Monat:PeriodDie Berechnung berücksichtigt die unterschiedliche Anzahl von Tagen in verschiedenen Monaten (z. B. hat der Februar 28 oder 29 Tage).
  4. ISO-8601-Format: Bei Verwendung derparse()Methode muss die Zeichenfolge demPnYnMnDFormat folgen (z. B. "P1Y2M3D").

Zusammenfassung

PeriodDie Klasse ist ein leistungsstarkes Werkzeug für den Umgang mit datumsbasierten Intervallen in der Java-Datums-/Zeit-API. Durch sie können Entwickler bequem Datumsberechnungen auf Jahres-, Monats- und Tagesebene durchführen, was sie besonders für Geschäftsszenarien geeignet macht, die Datumsgenauigkeit erfordern. Das BeherrschenPeriodder Verwendung dieser Klasse kann Ihren Code zur Datumsverarbeitung prägnanter und lesbarer machen.

Andere Erweiterungen