Java 8 Date- und Time-API

JavaJavaBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Java 8 hat die neue Datums- und Zeit-API eingeführt, die von der JodaTime-Bibliothek inspiriert ist. Sie überwindet die Nachteile der vorhandenen Date-API. In diesem Lab werden wir lernen, wie man die neue Datums- und Zeit-API verwendet, um Datum und Zeit zu manipulieren.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/ConcurrentandNetworkProgrammingGroup(["Concurrent and Network Programming"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java/BasicSyntaxGroup -.-> java/output("Output") java/StringManipulationGroup -.-> java/strings("Strings") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("Class Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/date("Date") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/format("Format") java/ConcurrentandNetworkProgrammingGroup -.-> java/working("Working") java/SystemandDataProcessingGroup -.-> java/system_methods("System Methods") subgraph Lab Skills java/output -.-> lab-117466{{"Java 8 Date- und Time-API"}} java/strings -.-> lab-117466{{"Java 8 Date- und Time-API"}} java/classes_objects -.-> lab-117466{{"Java 8 Date- und Time-API"}} java/class_methods -.-> lab-117466{{"Java 8 Date- und Time-API"}} java/date -.-> lab-117466{{"Java 8 Date- und Time-API"}} java/format -.-> lab-117466{{"Java 8 Date- und Time-API"}} java/working -.-> lab-117466{{"Java 8 Date- und Time-API"}} java/system_methods -.-> lab-117466{{"Java 8 Date- und Time-API"}} end

Erstellen von LocalDate-Instanzen

Die Klasse LocalDate wird verwendet, um ein Datum im standardisierten ISO-Format (yyyy-mm-dd) darzustellen. Es enthält keine Zeit und unterstützt keine Zeitzonen.

Wir können eine Instanz der Klasse LocalDate erstellen, indem wir die Methode now() verwenden. Sie wird das aktuelle Datum gemäß der Systemuhr erfassen.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currentDate = LocalDate.now();
        System.out.println("Aktuelles Datum: " + currentDate);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

Aktuelles Datum: 2021-08-13

Parsen eines Datumsstrings

Wir können eine Instanz der Klasse LocalDate erstellen, indem wir eine Zeichenfolge mit einem Datumsformat verwenden.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        String str = "2021-08-13";
        LocalDate date = LocalDate.parse(str);
        System.out.println("Datum: " + date);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

Datum: 2021-08-13

Plus- und Minus-Methoden

Wir können Tage, Monate oder Jahre zu einem Datum hinzufügen oder abziehen, indem wir die Methoden plusDays() oder minusDays() verwenden. Es gibt auch ähnliche Methoden, um Monate und Jahre zu verändern.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currDate = LocalDate.now();
        LocalDate yesterday = currDate.minusDays(1);
        LocalDate tomorrow = currDate.plusDays(1);

        System.out.println("Aktuelles Datum: " + currDate);
        System.out.println("Morgen's Datum: " + tomorrow);
        System.out.println("Gestern's Datum: " + yesterday);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

Aktuelles Datum: 2021-08-13
Morgen's Datum: 2021-08-14
Gestern's Datum: 2021-08-12

Getter-Methoden

Die Klasse LocalDate enthält mehrere Getter-Methoden, um verschiedene Informationen aus dem LocalDate zu erhalten, wie den Wochentag oder den Tag des Monats usw.

import java.time.DayOfWeek;
import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currDate = LocalDate.now();
        DayOfWeek dayOfWeek = currDate.getDayOfWeek();
        int dayOfMonth = currDate.getDayOfMonth();
        int dayOfYear = currDate.getDayOfYear();

        System.out.println("Datum: " + currDate);
        System.out.println("Wochentag: " + dayOfWeek);
        System.out.println("Tag des Monats: " + dayOfMonth);
        System.out.println("Tag des Jahres: " + dayOfYear);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

Datum: 2021-08-13
Wochentag: FREITAG
Tag des Monats: 13
Tag des Jahres: 225

Datumsvergleich

Wir können Datumsvergleiche durchführen, indem wir die Methoden isBefore() und isAfter() verwenden, um zu überprüfen, welches Datum größer ist.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currDate = LocalDate.now();
        LocalDate tomorrow = currDate.plusDays(1);
        LocalDate yesterday = currDate.minusDays(1);

        System.out.println("Aktuelles Datum ist nach dem Gestern's Datum: " + currDate.isAfter(yesterday));
        System.out.println("Aktuelles Datum ist vor dem Morgen's Datum: " + currDate.isBefore(tomorrow));
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

Aktuelles Datum ist nach dem Gestern's Datum: true
Aktuelles Datum ist vor dem Morgen's Datum: true

Erstellen von LocalTime-Instanzen

Um eine LocalTime-Instanz zu erstellen, können wir die Methoden now(), of() oder parse() verwenden. Die now()-Methode verwendet die Systemuhr, um die aktuelle Zeit abzurufen. Die of()- und parse()-Methoden können eine LocalTime gemäß den übergebenen Parametern erstellen.

import java.time.LocalTime;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalTime currentTime = LocalTime.now();
        LocalTime t1 = LocalTime.of(5, 32, 44);
        LocalTime t2 = LocalTime.parse("05:32:44");

        System.out.println(currentTime);
        System.out.println(t1);
        System.out.println(t2);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

17:43:08.749240
05:32:44
05:32:44

Plus- und Minus-Methoden

Wir können die Methoden plus() und minus() verwenden, um LocalTime-Instanzen zu manipulieren.

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalTime t1 = LocalTime.of(5, 32, 44);
        LocalTime t2 = t1.plus(2, ChronoUnit.HOURS);
        LocalTime t3 = t1.minusMinutes(10);

        System.out.println(t1);
        System.out.println(t2);
        System.out.println(t3);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

05:32:44
07:32:44
05:22:44

Erstellen von LocalDateTime-Instanzen

Die Klasse LocalDateTime ist eine Kombination der Klassen LocalDate und LocalTime. Eine LocalDateTime-Instanz enthält einen Datumsteil und einen Zeitsteil.

import java.time.LocalDateTime;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDateTime currDateTime = LocalDateTime.now();
        LocalDateTime dt1 = LocalDateTime.of(2020, 8, 13, 5, 32);
        LocalDateTime dt2 = LocalDateTime.parse("2020-08-13T05:32");

        System.out.println(currDateTime);
        System.out.println(dt1);
        System.out.println(dt2);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

2021-08-13T17:46:48.837697
2020-08-13T05:32
2020-08-13T05:32

Arbeiten mit Zeitzonen

Die oben diskutierten Klassen unterstützen keine Zeitzonen. Die Klasse ZonedDateTime bietet diese Funktionalität. Wir können die Klasse ZoneId verwenden, um verschiedene Zeitzonen zu identifizieren.

import java.time.ZonedDateTime;
import java.time.ZoneId;

public class DateTimeExample {
    public static void main(String[] args) {
        ZonedDateTime zdt = ZonedDateTime.now();
        ZoneId zoneTokyo = ZoneId.of("Asia/Tokyo");
        ZonedDateTime zdtT = ZonedDateTime.now(zoneTokyo);
        ZoneId zoneLondon = ZoneId.of("Europe/London");
        ZonedDateTime zdtL = ZonedDateTime.now(zoneLondon);

        System.out.println(zdt);
        System.out.println(zdtT);
        System.out.println(zdtL);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

2021-08-13T18:09:25.352237+05:30[Asia/Calcutta]
2021-08-13T21:39:25.356244+09:00[Asia/Tokyo]
2021-08-13T13:09:25.357316+01:00[Europe/London]

Formatieren von Daten

Java 8 bietet eine format()-Funktion an, um ein Datum mithilfe eines bestimmten Musters als Zeichenfolge zu formatieren.

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        String dateStr1 = dateTime.format(DateTimeFormatter.ISO_WEEK_DATE);
        String dateStr2 = dateTime.format(DateTimeFormatter.BASIC_ISO_DATE);
        String dateStr3 = dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        String dateStr4 = dateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm:ss"));

        System.out.println(dateStr1);
        System.out.println(dateStr2);
        System.out.println(dateStr3);
        System.out.println(dateStr4);
    }
}

Speichern und ausführen Sie den Code mit dem folgenden Befehl:

javac DateTimeExample.java && java DateTimeExample

Wir werden die folgende Ausgabe sehen:

2021-W32-5
20210813
2021-08-13T18:16:57.675704
13/08/2021 06:16:57

Zusammenfassung

In diesem Lab haben wir gelernt, wie man die Java 8 Date- und Time-API verwendet, um Daten und Zeiten zu manipulieren. Wir haben gelernt, wie man Instanzen der Klassen LocalDate, LocalTime und LocalDateTime erstellt, sie mit den Methoden plus() und minus() manipuliert und Informationen aus ihnen mit Getter-Methoden bekommt. Darüber hinaus haben wir gelernt, wie man mit Zeitzonen mit der Klasse ZonedDateTime umgeht und Daten mit der Klasse DateTimeFormatter formatiert.