Heim  >  Artikel  >  Java  >  Detailliertes Beispiel der Datums-API, einer neuen Funktion in Java 8

Detailliertes Beispiel der Datums-API, einer neuen Funktion in Java 8

黄舟
黄舟Original
2017-07-22 15:50:011486Durchsuche

Java 8 enthält einen neuen Satz von Zeit- und Datums-APIs unter dem Paket java.time. Im Folgenden wird Ihnen anhand von Beispielen das relevante Wissen über die neue Feature-Datums-API von Java8 erläutert. Interessierte Freunde sollten gemeinsam einen Blick darauf werfen.

Java 8 enthält einen neuen Satz von Zeit- und Datums-APIs unter dem Paket Java .Zeit. Das folgende Beispiel zeigt einige der wichtigsten Teile dieses neuen Satzes von APIs:

1.Clock Die Uhr

Die Clock-Klasse stellt bereit Zugriff auf die aktuellen Datums- und Uhrzeitmethoden. Clock sind zeitzonenabhängig und können anstelle von System.currentTimeMillis() verwendet werden, um die aktuelle Anzahl von Mikrosekunden abzurufen. Ein bestimmter Zeitpunkt kann auch mithilfe der Instant-Klasse dargestellt werden, mit der sich auch alte java.util.Date-Objekte erstellen lassen.


Clock clock = Clock.systemDefaultZone();
long millis = clock.millis();
Instant instant = clock.instant();
Date legacyDate = Date.from(instant);  // legacy java.util.Date

2. Zeitzonen Zeitzonen

In der neuen API werden Zeitzonen dargestellt von ZoneId. Die Zeitzone kann leicht mit der statischen Methode ermittelt werden. Die Zeitzone definiert den Zeitunterschied zur UTS-Zeit und ist äußerst wichtig bei der Konvertierung zwischen Instant Time-Objekten und lokalen Datumsobjekten.


System.out.println(ZoneId.getAvailableZoneIds());
// prints all available timezone ids
ZoneId zone1 = ZoneId.of("Europe/Berlin");
ZoneId zone2 = ZoneId.of("Brazil/East");
System.out.println(zone1.getRules());
System.out.println(zone2.getRules());
// ZoneRules[currentStandardOffset=+01:00]
// ZoneRules[currentStandardOffset=-03:00]

3.LocalTime Lokalzeit

LocalTime definiert eine Zeit ohne Zeitzonenangabe, wie 22 Uhr oder 17:30:15. Das folgende Beispiel erstellt zwei Ortszeiten unter Verwendung der vom vorherigen Code erstellten Zeitzone. Anschließend werden die Zeiten verglichen und die Zeitdifferenz zwischen den beiden Zeiten in Stunden und Minuten berechnet:


LocalTime now1 = LocalTime.now(zone1);
LocalTime now2 = LocalTime.now(zone2);
System.out.println(now1.isBefore(now2)); // false
long hoursBetween = ChronoUnit.HOURS.between(now1, now2);
long minutesBetween = ChronoUnit.MINUTES.between(now1, now2);
System.out.println(hoursBetween);    // -3
System.out.println(minutesBetween);   // -239

LocalTime bietet eine Vielzahl von Factory-Methoden, um die Erstellung zu vereinfachen Objekte, einschließlich Parsing-Zeitzeichenfolge.


LocalTime localTime= LocalTime.of(23, 59, 59);
System.out.println(localTime);    // 23:59:59
DateTimeFormatter germanFormatter =
  DateTimeFormatter
    .ofLocalizedTime(FormatStyle.SHORT)
    .withLocale(Locale.GERMAN);
LocalTime leetTime = localTime.format(germanFormatter);
System.out.println(leetTime);

4.LocalDate lokales Datum

LocalDate stellt ein genaues Datum dar, z. B. 2014 -03-11. Der Objektwert ist unveränderlich und seine Verwendung entspricht grundsätzlich der von LocalTime. Das folgende Beispiel zeigt, wie man Tage/Monate/Jahre zu einem Date-Objekt addiert und subtrahiert. Beachten Sie außerdem, dass diese Objekte unveränderlich sind und Vorgänge immer eine neue Instanz zurückgeben.


LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS);
LocalDate yesterday = tomorrow.minusDays(2);
LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
System.out.println(dayOfWeek);  // FRIDAY

Das Parsen eines LocalDate-Typs aus einer Zeichenfolge ist so einfach wie das Parsen einer LocalTime:


DateTimeFormatter germanFormatter =
  DateTimeFormatter
    .ofLocalizedDate(FormatStyle.MEDIUM)
    .withLocale(Locale.GERMAN);
LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter);
System.out.println(xmas);  // 2014-12-24

5.LocalDateTime lokales Datum und Uhrzeit

LocalDateTime stellt sowohl Uhrzeit als auch Datum dar, was dem Zusammenführen des Inhalts der ersten beiden Abschnitte in einem Objekt entspricht. LocalDateTime ist wie LocalTime und LocalDate unveränderlich. LocalDateTime bietet einige Methoden für den Zugriff auf bestimmte Felder.


LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59);
DayOfWeek dayOfWeek = sylvester.getDayOfWeek();
System.out.println(dayOfWeek);   // WEDNESDAY
Month month = sylvester.getMonth();
System.out.println(month);     // DECEMBER
long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY);
System.out.println(minuteOfDay);  // 1439

Solange die Zeitzoneninformationen angehängt sind, können sie in ein Point-in-Time-Instant-Objekt umgewandelt werden lässt sich leicht in das altmodische Java util.Date konvertieren.


Instant instant = sylvester
    .atZone(ZoneId.systemDefault())
    .toInstant();
Date legacyDate = Date.from(instant);
System.out.println(legacyDate);   // Wed Dec 31 23:59:59 CET 2014

Das Formatieren von LocalDateTime ist dasselbe wie das Formatieren von Uhrzeit und Datum. Zusätzlich zur Verwendung des vordefinierten Formats können wir das Format auch selbst definieren:


DateTimeFormatter formatter =
  DateTimeFormatter
    .ofPattern("MMM dd, yyyy - HH:mm");
LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter);
String string = formatter.format(parsed);
System.out.println(string);   // Nov 03, 2014 - 07:13

Im Gegensatz zu java.text.NumberFormat ist die neue Version von DateTimeFormatter unveränderlich und daher threadsicher.

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel der Datums-API, einer neuen Funktion in Java 8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn