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
2. Verwendungbetween()Methode zur Berechnung des Intervalls zwischen zwei Datumsangaben
Beispiel
LocalDate endDate = LocalDate.of(2021, 3, 4);
Period period = Period.between(startDate, endDate);
3. Verwendungparse()Methode zum Erstellen aus einer Zeichenkette
Beispiel
Abrufen der Komponenten eines Period-Objekts
Beispiel
int months = period.getMonths(); // Anzahl der Monate abrufen
int days = period.getDays(); // Anzahl der Tage abrufen
Operationen
1. Additions- und Subtraktionsoperationen
Beispiel
Period subtracted = period.minusDays(5);
2. Feststellen, ob er negativ ist
Beispiel
3. Periode normalisieren
Beispiel
Praktische Anwendungsbeispiele
Berechnung des Intervalls zwischen zwei Datumsangaben
Beispiel
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
Period twoMonths = Period.ofMonths(2);
LocalDate futureDate = today.plus(twoMonths);
Prüfen, ob der Zeitraum null ist
Beispiel
if (zeroPeriod.isZero()) {
System.out.println("Dies ist ein Null-Zeitraum");
}
Umfassendes Beispiel
Beispiel
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
- Genauigkeitsprobleme:
PeriodEs berechnet nur Unterschiede in Jahren, Monaten und Tagen und ignoriert Unterschiede in der Zeit (Stunden, Minuten usw.). - Umgang mit negativen Werten: Wenn das Enddatum früher als das Startdatum liegt,
Period.between()wird ein negativer Wert zurückgegeben. - 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). - ISO-8601-Format: Bei Verwendung der
parse()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.