Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java 8: Die robuste neue Date/Time-API

Java 8 führt eine neue Date-Time-API ein, um die Schwächen der alten API zu beheben:

Java 8 stellt die neue API unter dem Paket java.time bereit. Wichtige Klassen:

Local Date-Time API

LocalDate, LocalTime und LocalDateTime vereinfachen die Entwicklung, wo Zeitzonen nicht benötigt werden. Beispiel:

Java8Tester.java

Live Demo
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testLocalDateTime();
    }

    public void testLocalDateTime() {
        // Aktuelles Datum und Uhrzeit
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println("Current DateTime: " + currentTime);

        LocalDate date1 = currentTime.toLocalDate();
        System.out.println("date1: " + date1);

        Month month = currentTime.getMonth();
        int day = currentTime.getDayOfMonth();
        int seconds = currentTime.getSecond();
        System.out.println("Month: " + month + " day: " + day + " seconds: " + seconds);

        LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
        System.out.println("date2: " + date2);

        // 12. Dezember 2014
        LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
        System.out.println("date3: " + date3);

        // 22:15 Uhr
        LocalTime date4 = LocalTime.of(22, 15);
        System.out.println("date4: " + date4);

        // String parsen
        LocalTime date5 = LocalTime.parse("20:15:30");
        System.out.println("date5: " + date5);
    }
}

Ergebnis prüfen

Kompilieren:

C:\JAVA>javac Java8Tester.java

Ausführen:

C:\JAVA>java Java8Tester

Erwartete Ausgabe:

Current DateTime: 2014-12-09T11:00:45.457
date1: 2014-12-09
Month: DECEMBER day: 9 seconds: 45
date2: 2012-12-10T11:00:45.457
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

Zoned Date-Time API

Verwenden Sie die Zoned-API, wenn Zeitzonen relevant sind.

Java8Tester.java

Live Demo
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testZonedDateTime();
    }

    public void testZonedDateTime() {
        ZonedDateTime date1 = ZonedDateTime.parse("2007-12-03T10:15:30+05:30[Asia/Karachi]");
        System.out.println("date1: " + date1);

        ZoneId id = ZoneId.of("Europe/Paris");
        System.out.println("ZoneId: " + id);

        ZoneId currentZone = ZoneId.systemDefault();
        System.out.println("CurrentZone: " + currentZone);
    }
}

Ergebnis prüfen

Kompilieren & ausführen wie oben. Erwartete Ausgabe:

date1: 2007-12-03T10:15:30+05:00[Asia/Karachi]
ZoneId: Europe/Paris
CurrentZone: Etc/UTC

ChronoUnit Enum

java.time.temporal.ChronoUnit ersetzt die ganzzahligen Werte der alten API für Tag, Monat etc.

Java8Tester.java

Live Demo
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testChromoUnits();
    }

    public void testChromoUnits() {
        LocalDate today = LocalDate.now();
        System.out.println("Current date: " + today);

        LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
        System.out.println("Next week: " + nextWeek);

        LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
        System.out.println("Next month: " + nextMonth);

        LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println("Next year: " + nextYear);

        LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES);
        System.out.println("Date after ten year: " + nextDecade);
    }
}

Ergebnis prüfen

Erwartete Ausgabe (Beispiel):

Current date: 2014-12-10
Next week: 2014-12-17
Next month: 2015-01-10
Next year: 2015-12-10
Date after ten year: 2024-12-10

Period und Duration

Zwei spezialisierte Klassen für Zeitdifferenzen:

Java8Tester.java

Live Demo
import java.time.temporal.ChronoUnit;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Duration;
import java.time.Period;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testPeriod();
        java8tester.testDuration();
    }

    public void testPeriod() {
        LocalDate date1 = LocalDate.now();
        System.out.println("Current date: " + date1);

        LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS);
        System.out.println("Next month: " + date2);

        Period period = Period.between(date2, date1);
        System.out.println("Period: " + period);
    }

    public void testDuration() {
        LocalTime time1 = LocalTime.now();
        Duration twoHours = Duration.ofHours(2);
        LocalTime time2 = time1.plus(twoHours);
        Duration duration = Duration.between(time1, time2);
        System.out.println("Duration: " + duration);
    }
}

Ergebnis prüfen

Erwartete Ausgabe:

Current date: 2014-12-10
Next month: 2015-01-10
Period: P-1M
Duration: PT2H

Temporal Adjusters

TemporalAdjuster ermöglicht Datumsberechnungen wie „zweiter Samstag des Monats“ oder „nächster Dienstag“.

Java8Tester.java

Live Demo
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testAdjusters();
    }

    public void testAdjusters() {
        LocalDate date1 = LocalDate.now();
        System.out.println("Current date: " + date1);

        // nächster Dienstag
        LocalDate nextTuesday = date1.with(TemporalAdjusters.next(DayOfWeek.TUESDAY));
        System.out.println("Next Tuesday on: " + nextTuesday);

        // zweiter Samstag des nächsten Monats
        LocalDate firstInYear = LocalDate.of(date1.getYear(), date1.getMonth(), 1);
        LocalDate secondSaturday = firstInYear.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY))
            .with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
        System.out.println("Second Saturday on: " + secondSaturday);
    }
}

Ergebnis prüfen

Erwartete Ausgabe:

Current date: 2014-12-10
Next Tuesday on: 2014-12-16
Second Saturday on: 2014-12-13

Abwärtskompatibilität

Die Methode toInstant() wurde zu Date und Calendar hinzugefügt, um sie in die neue API zu konvertieren. Mit ofInstant(Instant, ZoneId) erhält man LocalDateTime oder ZonedDateTime.

Java8Tester.java

Live Demo
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
import java.time.Instant;
import java.time.ZoneId;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8tester = new Java8Tester();
        java8tester.testBackwardCompatability();
    }

    public void testBackwardCompatability() {
        Date currentDate = new Date();
        System.out.println("Current date: " + currentDate);

        Instant now = currentDate.toInstant();
        ZoneId currentZone = ZoneId.systemDefault();

        LocalDateTime localDateTime = LocalDateTime.ofInstant(now, currentZone);
        System.out.println("Local date: " + localDateTime);

        ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, currentZone);
        System.out.println("Zoned date: " + zonedDateTime);
    }
}

Ergebnis prüfen

Erwartete Ausgabe:

Current date: Wed Dec 10 05:44:06 UTC 2014
Local date: 2014-12-10T05:44:06.635
Zoned date: 2014-12-10T05:44:06.635Z[Etc/UTC]

Java

  1. Aktuelles Datum und Uhrzeit in Python abrufen: Praktischer Leitfaden
  2. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  3. Java Kommentare: Typen, Verwendung und Best Practices
  4. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  5. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  6. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  7. Java Datum und Zeit meistern: Konstruktoren, Methoden & Best Practices
  8. C++ Datum & Zeit: Umfassender Leitfaden
  9. Java 10: Zeitbasiertes Release-Versionierung (JEP 322) – Vorhersehbare halbjährliche Updates
  10. Java 10: 70+ neue APIs – Unmodifiable Collections, Optional.orElseThrow() & mehr