Die Anleitung zu Java Temporal
1. Temporal
Die Temporal-Interface simuliert ein gemeinsames Konzept zwischen den Konzepten Datum (date), Uhrzeit (time) und Zeitversatz (time-offset). Es bietet grundlegende Methoden zum Abrufen von Informationen aus diesen Objekten.
public interface Temporal extends TemporalAccessor
Die Temporal-Interface geht von der TemporalAccessor-Interface aus, und sie sind ein bisschen anders:
TemporalAccessor | Simulieren Sie ein gemeinsames Konzept zwischen den Konzepten Datum (date), Uhrzeit (time), Zeitversatz (time-offset), Zeitzonenversatz (zone-offset) und Ära (era). |
Temporal | Simulieren Sie ein gemeinsames Konzept zwischen den Konzepten Datum (date), Zeit (time) und Zeitversatz (time-offset). |
Daher reduziert Interface Temporal die Anzahl der Konzepte, die es im Vergleich zu TemporalAccessor darstellt. Es bietet detailliertere Methoden dieser Konzepte.
Liste der Unterklassen oder enum, die die Temporal-Interface implementieren:
- TemporalAccessor
- LocalDate
- LocalTime
- LocalDateTime
- ZonedDateTime
- OffsetDateTime
- OffsetTime
- Year
- YearMonth
- ThaiBuddhistDate
- MinguoDate
- JapaneseDate
- HijrahDate
- Instant
- ChronoLocalDate
- ChronoLocalDateTime
- ChronoZonedDateTime
2. Temporal methods
public boolean isSupported(TemporalUnit unit);
public default Temporal with(TemporalAdjuster adjuster)
public Temporal with(TemporalField field, long newValue);
public default Temporal plus(TemporalAmount amount)
public Temporal plus(long amountToAdd, TemporalUnit unit);
public default Temporal minus(TemporalAmount amount)
public default Temporal minus(long amountToSubtract, TemporalUnit unit)
public long until(Temporal endExclusive, TemporalUnit unit);
3. isSupported(TemporalUnit)
Prüfen Sie, ob die angegebene Einheit von diesem Temporal unterstützt wird.
public boolean isSupported(TemporalUnit unit)
Diese Prüfung ist erforderlich, bevor die Methode plus(long,TemporalUnit) oder minus(long,TemporalUnit) verwendet wird. Wenn diese Methoden mit einer nicht unterstützten Unit aufgerufen werden, wird eine Ausnahme ausgelöst.
Temporal_isSupported_x1.java
Temporal localDate = LocalDate.now();
boolean supported = localDate.isSupported(ChronoField.DAY_OF_MONTH);
System.out.println("localDate support DAY_OF_MONTH? " + supported); // true
Temporal localTime = LocalTime.now();
supported = localTime.isSupported(ChronoField.DAY_OF_MONTH);
System.out.println("localTime support DAY_OF_MONTH? " + supported); // false
Sie können auch die TemporalUnit.isSupportedBy(Temporal)-Methode verwenden, um zu überprüfen, ob eine bestimmte TemporalUnit von einer bestimmten Temporal unterstützt wird.
TemporalUnit_isSupportedBy_x1.java
Temporal localDate = LocalDate.now();
boolean supported = ChronoField.DAY_OF_MONTH.isSupportedBy(localDate);
System.out.println("localDate support DAY_OF_MONTH? " + supported); // true
- ChronoUnit
- TemporalUnit
4. with(TemporalAdjuster)
Gibt eine Kopie dieses Temporal-Objekts mit einigen Informationen zurück, die durch das angegebene TemporalAdjuster-Objekt angepasst wurden.
public default Temporal with(TemporalAdjuster adjuster)
Grundsätzlich gibt es 2 Möglichkeiten, ein Objekt Temporal anzupassen, wobei der zweite Ansatz empfohlen wird:
Temporal adjustedCopy = temporalAdjuster.adjustInto(temporal); // (1)
Temporal adjustedCopy = temporal.with(temporalAdjuster); // (2)
Zum Beispiel:
Temporal_with_adjuster_ex1.java
// Temporal object:
Temporal localDateTime = LocalDateTime.of(2020, 1, 1, 13, 30, 45);
System.out.println("localDateTime: " + localDateTime); // 2020-01-01T13:30:45
// TemporalAdjuter object:
TemporalAdjuster adjuster = Month.JULY;
LocalDateTime adjustedLocalDateTime = (LocalDateTime) localDateTime.with(adjuster);
System.out.println("adjustedLocalDateTime: " + adjustedLocalDateTime); // 2020-07-01T13:30:45
Weitere Beispiele finden Sie im Artikel TemporalAdjuster:
5. with(TemporalField, long)
Gibt eine Kopie dieses Objekt Temporal zurück, wobei das angegebene Feld geändert wurde.
public Temporal with(TemporalField field, long newValue)
In einigen Fällen kann das Ändern eines Felds dazu führen, dass ein anderes Feld ungültig wird. Wenn Sie beispielsweise am 31. Januar von Januar auf Februar ändern, wird der Tag des Monats ungültig. Diese Methode ändert den Tag des Monats auf das nächste gültige Datum.
Temporal_with_field_ex1.java
// Temporal object:
Temporal localDate1 = LocalDate.of(2020, 1, 15);
System.out.println("localDate1: " + localDate1); // 2020-01-15
Temporal copiedLocalDate1 = localDate1.with(ChronoField.MONTH_OF_YEAR, 2);
System.out.println("copiedLocalDate1: " + copiedLocalDate1); // 2020-02-15
System.out.println();
// Temporal object:
Temporal localDate2 = LocalDate.of(2020, 1, 31);
System.out.println("localDate2: " + localDate2); // 2020-01-31
Temporal copiedLocalDate2 = localDate2.with(ChronoField.MONTH_OF_YEAR, 2);
System.out.println("copiedLocalDate2: " + copiedLocalDate2); // 2020-02-29
- ChronoField
- TemporalField
6. plus(TemporalAmount)
Geben Sie eine Kopie von diesem Temporal mit einer hinzugefügten Zeit zurück.
public default Temporal plus(TemporalAmount amount)
Zum Beispiel:
Temporal_plus_amount_ex1.java
Temporal localDateTime = LocalDateTime.of(2020,5,15, 13,30,45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();
// plus(TemporalAmount amountToAdd)
TemporalAmount amount1 = Period.ofDays(5);
LocalDateTime localDateTime1 = (LocalDateTime) localDateTime.plus(amount1);
System.out.println("localDateTime1: " + localDateTime1); // 2020-05-20T13:30:45
// 1 day 2 hours 30 minutes.
TemporalAmount amount2 = Duration.ofMinutes(1* 24 * 60 + 2* 60 + 30);
LocalDateTime localDateTime2 = (LocalDateTime) localDateTime.plus(amount2);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-16T16:00:45
Die Methode Temporal.plus(TemporalAmount) funktioniert ähnlich wie die Methode TemporalAmount.addTo(Temporal):
// This method is defined in the TemporalAmount interface:
public Temporal addTo(Temporal temporal)
7. plus(long, TemporalUnit)
Geben Sie eine Kopie von diesem Temporal mit der angegebenen Wertschöpfungsmenge zurück.
public Temporal plus(long amountToAdd, TemporalUnit unit)
Zum Beispiel:
Temporal_plus_unit_ex1.java
Temporal localDateTime = LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();
// plus(long amountToAdd, TemporalUnit unit)
LocalDateTime localDateTime1 = (LocalDateTime) localDateTime.plus(20, ChronoUnit.DAYS);
System.out.println("localDateTime1: " + localDateTime1); // 2020-06-04T13:30:45
// plus(long amountToAdd, TemporalUnit unit)
LocalDateTime localDateTime2 = (LocalDateTime) localDateTime.plus(2, ChronoUnit.WEEKS);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-29T13:30:45
Die Methode Temporal.plus(long,TemporalUnit) funktioniert ähnlich wie die Methode TemporalUnit.addTo(R,long):
// This method is defined in the TemporalUnit interface:
public <R extends Temporal> R addTo(R temporal, long amount)
- ChronoUnit
- TemporalUnit
8. minus(TemporalAmount)
Gibt eine Kopie von diesem Temporal zurück, wobei die angegebene Zeit abgezogen wurde
public default Temporal minus(TemporalAmount amount)
Zum Beispiel:
Temporal_minus_amount_ex1.java
Temporal localDateTime = LocalDateTime.of(2020,5,15, 13,30,45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();
// minus(TemporalAmount amountToAdd)
TemporalAmount amount1 = Period.ofDays(5);
LocalDateTime localDateTime1 = (LocalDateTime) localDateTime.minus(amount1);
System.out.println("localDateTime1: " + localDateTime1); // 2020-05-10T13:30:45
// 1 day 2 hours 30 minutes.
TemporalAmount amount2 = Duration.ofMinutes(1* 24 * 60 + 2* 60 + 30);
LocalDateTime localDateTime2 = (LocalDateTime) localDateTime.minus(amount2);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-14T11:00:45
Die Methode Temporal.minus(TemporalAmount) funktioniert ähnlich wie die Methode TemporalAmount.subtractFrom(Temporal):
// This method is defined in the TemporalAmount interface:
public Temporal subtractFrom(Temporal temporal)
9. minus(long, TemporalUnit)
Geben Sie eine Kopie von diesem Temporal zurück, wobei der angegebene Betrag in der angegebenen Einheit abgezogen wird.
public default Temporal minus(long amountToSubtract, TemporalUnit unit)
Zum Beispiel:
Temporal_minus_unit_ex1.java
Temporal localDateTime = LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();
// minus(long amountToAdd, TemporalUnit unit)
LocalDateTime localDateTime1 = (LocalDateTime) localDateTime.minus(20, ChronoUnit.DAYS);
System.out.println("localDateTime1: " + localDateTime1); // 2020-04-25T13:30:45
// minus(long amountToAdd, TemporalUnit unit)
LocalDateTime localDateTime2 = (LocalDateTime) localDateTime.minus(20, ChronoUnit.HOURS);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-14T17:30:45
- ChronoUnit
- TemporalUnit
10. until(Temporal, TemporalUnit)
Berechnen Sie die Zeit von einem Temporal zu einem anderen Temporal in den angegebenen Einheiten.
(**) Die angegebene Unit muss von beiden an der Methode beteiligten Objekt Temporal unterstützt werden, sonst wird eine DateTimeException geworfen.
public long until(Temporal endExclusive, TemporalUnit unit)
Zum Beispiel:
Temporal_until_ex1.java
Temporal temporalFrom = LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("temporalFrom: " + temporalFrom); // 2020-05-15T13:30:45
Temporal temporalTo = LocalDate.of(2020, 5, 16).atStartOfDay(); // LocalDateTime
System.out.println("temporalTo: " + temporalTo); // 2020-05-16T00:00
System.out.println();
long hourAmount = temporalFrom.until(temporalTo, ChronoUnit.HOURS);
System.out.println("hourAmount: " + hourAmount); // 10
Sie können im gleichen Fall auch die Methode TemporalUnit.between(Temporal,Temporal) verwenden:
TemporalUnit_between_ex1.java
Temporal temporalFrom = LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("temporalFrom: " + temporalFrom); // 2020-05-15T13:30:45
Temporal temporalTo = LocalDate.of(2020, 5, 16).atStartOfDay(); // LocalDateTime
System.out.println("temporalTo: " + temporalTo); // 2020-05-16T00:00
System.out.println();
long hourAmount = ChronoUnit.HOURS.between(temporalFrom, temporalTo);
System.out.println("hourAmount: " + hourAmount); // 10
- TemporalUnit
- ChronoUnit
Die Anleitungen Java Date Time
- Die Anleitung zu Java ZoneId
- Die Anleitung zu Java Temporal
- Die Anleitung zu Java Period
- Die Anleitung zu Java TemporalAdjusters
- Die Anleitung zu Java MinguoDate
- Die Anleitung zu Java TemporalAccessor
- Die Anleitung zu Java JapaneseEra
- Die Anleitung zu Java HijrahDate
- Die Anleitung zu Java Date Time
- Was ist Sommerzeit (DST)?
- Die Anleitung zu Java LocalDate
- Die Anleitung zu Java LocalTime
- Die Anleitung zu Java LocalDateTime
- Die Anleitung zu Java ZonedDateTime
- Die Anleitung zu Java JapaneseDate
- Die Anleitung zu Java Duration
- Die Anleitung zu Java TemporalQuery
- Die Anleitung zu Java TemporalAdjuster
- Die Anleitung zu Java ChronoUnit
- Die Anleitung zu Java TemporalQueries
Show More
- Anleitungen Java Web Services
- Anleitungen Java Servlet/JSP
- Die Anleitungen JavaFX
- Anleitungen Java SWT
- Die Anleitungen Oracle Java ADF
- Java Grundlagen
- Die Anleitungen Java Collections Framework
- Die Anleitungen Java IO
- Die Anleitungen Struts2 Framework
- Anleitungen Spring Boot
- Anleitungen Spring Cloud
- Anleitungen Maven
- Anleitungen Gradle