Java 8 Datums-/Zeit-API

Java 8 新特性Neue Funktionen in Java 8


Java 8 verstärkt die Handhabung von Datum und Uhrzeit weiter, indem es die neue Date-Time-API (JSR 310) veröffentlicht.

In der alten Version von Java hatte die Date-Time-API viele Probleme, darunter:

  • Nicht thread-sicher− java.util.Date ist nicht thread-sicher, und alle Datumsklassen sind veränderbar. Dies ist eines der größten Probleme mit den Java-Datumsklassen.

  • Schlechtes Design− Die Definitionen der Java-Datums-/Zeitklassen sind nicht konsistent. Datumsklassen existieren sowohl im Paket java.util als auch im Paket java.sql. Außerdem sind Klassen zum Formatieren und Parsen im Paket java.text definiert. java.util.Date enthält sowohl Datum als auch Uhrzeit, während java.sql.Date nur das Datum enthält. Es im Paket java.sql unterzubringen, ist unvernünftig. Darüber hinaus haben diese beiden Klassen denselben Namen, was an sich ein sehr schlechtes Design ist.

  • Problematische Handhabung von Zeitzonen− Die Datumsklassen bieten keine Internationalisierung und keine Zeitzonenunterstützung. Daher führte Java die Klassen java.util.Calendar und java.util.TimeZone ein, aber auch sie haben alle oben genannten Probleme.

Java 8 bietet imjava.timePaket viele neue APIs. Die folgenden sind zwei der wichtigeren APIs:

  • Lokal (lokal)− Vereinfacht die Handhabung von Datum und Uhrzeit, ohne das Problem der Zeitzonen.

  • Zoniert (Zeitzone)− Behandelt Datum und Uhrzeit mit der angegebenen Zeitzone.

Das neue java.time-Paket deckt alle Operationen für die Handhabung von Datum, Uhrzeit, Datum/Uhrzeit, Zeitzonen, Zeitpunkten, Prozess (during) und Uhr ab.


Lokale Date-Time-API

Die Klassen LocalDate/LocalTime und LocalDateTime können in Fällen verwendet werden, in denen keine Zeitzonenbehandlung erforderlich ist. Der Code lautet wie folgt:

Java8Tester.java-Datei

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 abrufen LocalDateTime currentTime = LocalDateTime.now(); System.out.println("Aktuelle Zeit:" + 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("Monat:" + month +", Tag:" + day +", Sekunde:" + 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 Stunden 15 Minuten LocalTime date4 = LocalTime.of(22, 15); System.out.println("date4: " + date4); //Zeichenkette parsen LocalTime date5 = LocalTime.parse("20:15:30"); System.out.println("date5: " + date5); } }

Beim Ausführen des obigen Skripts lautet die Ausgabe:

$ javac Java8Tester.java 
$ java Java8Tester
当前时间: 2016-04-15T16:55:48.668
date1: 2016-04-15
月: APRIL, 日: 15, 秒: 48
date2: 2012-04-10T16:55:48.668
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

Zoned Date-Time-API

Wenn wir Zeitzonen berücksichtigen müssen, können wir die Zoned Date-Time-API verwenden:

Java8Tester.java-Datei

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(){ //Aktuelles Datum und Uhrzeit abrufen ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]"); System.out.println("date1: " + date1); ZoneId id = ZoneId.of("Europe/Paris"); System.out.println("ZoneId: " + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("Aktuelle Zeitzone:" + currentZone); } }

Beim Ausführen des obigen Skripts lautet die Ausgabe:

$ javac Java8Tester.java 
$ java Java8Tester
date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai]
ZoneId: Europe/Paris
当期时区: Asia/Shanghai

Java 8 新特性Neue Funktionen in Java 8

Weitere Erweiterungen