Die Anleitung zu Java TemporalQueries
1. TemporalQueries
Die Klasse TemporalQueries stellt statische Methoden bereit, um allgemeine und nützliche Objekte TemporalQuery abzurufen. Die von diesen TemporalQuery erhaltenen Informationen können sein:
- Chronology
- LocalDate
- LocalTime
- ZoneOffset
- Precision
- Zone
- ZoneId
Siehe auch Artikel über die Interface TemporalQuery mit einfacher und benutzerdefinierter TemporalQuery.
Es gibt zwei Möglichkeiten, ein Objekt TemporalAccessor abzufragen, wobei der zweite Ansatz empfohlen wird.
// These two lines are equivalent, but the second approach is recommended
information = temporalQuery.queryFrom(temporalAccessor); // (1)
information = temporalAccessor.query(temporalQuery); // (2)
2. TemporalQueries methods
Alle von TemporalQueries bereitgestellten Methoden sind statisch und geben ein Objekt TemporalQuery zurück.
public static TemporalQuery<ZoneId> zoneId()
public static TemporalQuery<Chronology> chronology()
public static TemporalQuery<TemporalUnit> precision()
public static TemporalQuery<ZoneId> zone()
public static TemporalQuery<ZoneOffset> offset()
public static TemporalQuery<LocalDate> localDate()
public static TemporalQuery<LocalTime> localTime()
3. precision()
Geben Sie TemporalQuery<TemporalUnit> zurück, um die kleinste von einem TemporalAccessor unterstützte Einheit abzufragen.
public static TemporalQuery<TemporalUnit> precision()
Tabelle der Klassen, die die im JDK verfügbare Interface TemporalAccessor und die kleinste unterstützte Unit implementieren.
TemporalAccessor | Precision | isTimeBased() | isDateBased() |
Instant | NANOS | true | false |
LocalDate | DAYS | false | true |
LocalTime | NANOS | true | false |
LocalDateTime | NANOS | true | false |
ZonedDateTime | NANOS | true | false |
OffsetTime | NANOS | true | false |
OffsetDateTime | NANOS | true | false |
ChronoLocalDate | DAYS | false | true |
ChronoLocalDateTime | NANOS | true | false |
ChronoZonedDateTime | NANOS | true | false |
Era | ERAS | false | true |
DayOfWeek | DAYS | false | true |
Month | MONTHS | false | true |
Year | YEARS | false | true |
YearMonth | MONTHS | false | true |
MonthDay | null | ||
ZoneOffset | null |
Zum Beispiel:
TemporalQueries_precision_ex1.java
LocalDate localDate = LocalDate.now();
TemporalQuery<TemporalUnit> query = TemporalQueries.precision();
TemporalUnit smallestUnit = localDate.query(query); // Can cast to ChronoUnit
ChronoUnit smallestChronoUnit = (ChronoUnit) smallestUnit; // ChronoUnit.DAYS
System.out.println("localDate support smallest unit: " + smallestChronoUnit); // Days
System.out.println(" >> Name: " + smallestChronoUnit.name()); // DAYS
System.out.println(" >> isTimeBased()?: " + smallestChronoUnit.isTimeBased()); // false
System.out.println(" >> isDateBased()?: " + smallestChronoUnit.isDateBased()); // true
Output:
localDate support smallest unit: Days
>> Name: DAYS
>> isTimeBased()?: false
>> isDateBased()?: true
- TemporalAccessor
- TemporalUnit
- ChronoUnit
4. chronology()
Geben Sie TemporalQuery<Chronology> zurück, um Informationen über die einem TemporalAccessor zugeordnete Chronology abzurufen.
public static TemporalQuery<Chronology> chronology()
TemporalAccessor | Return | Note |
ChronoLocalDate | Returns the associated chronology | |
ChronoLocalDateTime | Returns the associated chronology | |
ChronoZonedDateTime | Returns the associated chronology | |
Era | Returns the associated chronology | |
LocalDate |
Return
IsoChronology.INSTANCE | |
LocalDateTime |
Return
IsoChronology.INSTANCE | |
ZonedDateTime |
Return
IsoChronology.INSTANCE | |
OffsetDateTime |
Return
IsoChronology.INSTANCE | |
Month |
Return
IsoChronology.INSTANCE | |
Year |
Return
IsoChronology.INSTANCE | |
YearMonth |
Return
IsoChronology.INSTANCE | |
MonthDay |
Return
IsoChronology.INSTANCE | |
LocalTime | null | Does not represent a date |
OffsetTime | null | Does not represent a date |
ZoneOffset | null | Does not represent a date |
Instant | null | Does not represent a date |
DayOfWeek | null | Shared across chronologies |
TemporalQueries_chronology_ex1.java
TemporalAccessor localDateTime = LocalDateTime.now();
Chronology chronology = localDateTime.query(TemporalQueries.chronology());
System.out.println(chronology.getClass().getName()); // java.time.chrono.IsoChronology
System.out.println(chronology.getId()); // ISO
Die Referenz der statischen Methode Chronology.from(TemporalAccessor) kann als TemporalQuery verwendet werden, was dieser Methode entspricht, außer dass sie eine Ausnahme auslösen kann, wenn das Ergebnis nicht abgerufen werden kann.
TemporalQueries_chronology_ex2.java
TemporalQuery<Chronology> query = Chronology::from; // Method reference
// TemporalAccessor object:
TemporalAccessor temporalAccessor = MonthDay.now();
// Throw exception if Chronology cannot be obtained.
Chronology chronology = temporalAccessor.query(query);
System.out.println(chronology.getClass().getName()); // java.time.chrono.IsoChronology
System.out.println(chronology.getId()); // ISO
Output:
java.time.chrono.IsoChronology
ISO
- Chronology
- IsoChronology
- TemporalAccessor
5. localDate()
Geben Sie eine TemporalQuery<LocalDate> zurück, um die LocalDate-Komponente aus einem TemporalAccessor Objekt abzurufen. Das Abfrageergebnis ist null, wenn diese Komponente nicht vorhanden ist.
public static TemporalQuery<LocalDate> localDate()
Zum Beispiel:
TemporalQueries_localDate_ex1.java
TemporalQuery<LocalDate> query = TemporalQueries.localDate();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalDate localDate = zonedDateTime.query(query);
System.out.println("localDate: " + localDate);
System.out.println();
//
LocalTime localTime = LocalTime.now();
System.out.println("localTime: " + localTime);
localDate = localTime.query(query);
System.out.println("localDate: " + localDate);
Output:
zonedDateTime: 2021-07-10T01:26:20.194520+06:00[Asia/Bishkek]
localDate: 2021-07-10
localTime: 01:26:20.195471
localDate: null
Die Referenz der statischen Methode LocalDate.from(TemporalAccessor) kann als TemporalQuery verwendet werden, die dieser Methode entspricht, außer dass sie eine Ausnahme auslösen kann, wenn das Ergebnis nicht abgerufen werden kann.
TemporalQueries_localDate_ex2.java
// Method reference
TemporalQuery<LocalDate> query = LocalDate::from; // Same as: TemporalQueries.localDate();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalDate localDate = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localDate: " + localDate);
System.out.println();
//
LocalTime localTime = LocalTime.now();
System.out.println("localTime: " + localTime);
localDate = localTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localDate: " + localDate);
6. localTime()
Geben Sie eine TemporalQuery<LocalTime> zurück, um die Komponente LocalTime aus einem Objekt TemporalAccessor abzurufen. Das Abfrageergebnis ist null, wenn diese Komponente nicht vorhanden ist.
public static TemporalQuery<LocalTime> localTime()
Zum Beispiel:
TemporalQueries_localTime_ex1.java
TemporalQuery<LocalTime> query = TemporalQueries.localTime();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalTime localTime = zonedDateTime.query(query);
System.out.println("localTime: " + localTime);
System.out.println();
//
LocalDate localDate = LocalDate.now();
System.out.println("localDate: " + localDate);
localTime = localDate.query(query);
System.out.println("localTime: " + localTime);
Output:
zonedDateTime: 2021-07-10T01:45:18.694232+06:00[Asia/Bishkek]
localTime: 01:45:18.694232
localDate: 2021-07-10
localTime: null
Die Referenz der statischen Methode LocalTime.from(TemporalAccessor) kann als TemporalQuery verwendet werden, was dieser Methode entspricht, außer dass sie eine Ausnahme auslösen kann, wenn das Ergebnis nicht abgerufen werden kann.
TemporalQueries_localTime_ex2.java
// Method reference
TemporalQuery<LocalTime> query = LocalTime::from; // Same as: TemporalQueries.localTime();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalTime localTime = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localTime: " + localTime);
System.out.println();
//
LocalDate localDate = LocalDate.now();
System.out.println("localDate: " + localDate);
localTime = localDate.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localTime: " + localTime);
7. zoneId()
Gibt eine TTemporalQuery<ZoneId> zurück, die Information von ID-Zeitzone aus einem Objekt TemporalAccessor abruft. Das Ergebnis dieser Abfrage ist strikt, d. h. sie gibt eine ID-Zeitzonen für eine Region zurück, z. B. "Europe/Paris", "GMT-10", "UTC+7", "UT+05:30". Auf Offsets basierende Zeitzonen-ID(s) gelten nicht als streng, wie "+08:30", "-07".
public static TemporalQuery<ZoneId> zoneId()
Das von dieser Methode zurückgegebene Objekt TemporalQuery<ZoneId> wird nur verwendet, um das Objekt ZonedDateTime oder ChroneZonedDateTime abzufragen und die ihm zugeordnete ZoneId abzurufen. Abfragen mit anderen TTemporalAccessor wie OffsetDateTime, LocalDateTime, .. geben null zurück.
Wenn Sie eine weniger strenge Zeitzonenabfrage benötigen, die alle Arten von Zeitzonen-IDs akzeptiert, einschließlich Offset-basierte Zeitzonen-IDs, verwenden Sie die Methode TemporalQueries.zone().
TemporalQueries_zoneId_ex1.java
TemporalQuery<ZoneId> query = TemporalQueries.zoneId();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneId zoneId = zonedDateTime.query(query);
System.out.println("zoneId: " + zoneId);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneId = offsetDateTime.query(query);
System.out.println("zoneId: " + zoneId);
Output:
zonedDateTime: 2021-07-09T23:10:49.446493+06:00[Asia/Bishkek]
zoneId: Asia/Bishkek
offsetDateTime: 2021-07-09T19:10:49.448945+02:00
zoneId: null
- ZoneId
- ZoneOffset
- ChronoZonedDateTime
- ZonedDateTime
- OffsetDateTime
8. offset()
Geben Sie eine TemporalQuery<ZoneOffset> zurück, um Zeitzonen-Offsetinformationen von einem Objekt TemporalAccessor abzurufen.
public static TemporalQuery<ZoneOffset> offset()
Zum Beispiel:
TemporalQueries_offset_ex1.java
TemporalQuery<ZoneOffset> query = TemporalQueries.offset();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneOffset zoneOffset = zonedDateTime.query(query);
System.out.println("zoneOffset: " + zoneOffset);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneOffset = offsetDateTime.query(query);
System.out.println("zoneOffset: " + zoneOffset);
Output:
zonedDateTime: 2021-07-10T00:52:36.066446+06:00[Asia/Bishkek]
zoneOffset: +06:00
offsetDateTime: 2021-07-09T20:52:36.068898+02:00
zoneOffset: +02:00
Die Referenz der statischen Methode ZoneOffset.from(TemporalAccessor) kann als TemporalQuery verwendet werden, was dieser Methode entspricht, außer dass sie eine Ausnahme auslösen kann, wenn das Ergebnis nicht abgerufen werden kann.
TemporalQueries_offset_ex2.java
// Method reference
TemporalQuery<ZoneOffset> query = ZoneOffset::from; // Same as: TemporalQueries.offset()
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneOffset zoneOffset = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneOffset: " + zoneOffset);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneOffset = offsetDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneOffset: " + zoneOffset);
- ZoneId
- ZoneOffset
- ChronoZonedDateTime
- ZonedDateTime
- OffsetDateTime
9. zone()
Gibt eine TemporalQuery<ZoneId> zurück, die Informationen von ID Zeitzonen aus einem Objekt TemporalAccessor abruft. Das Ergebnis dieser Abfrage ist nachsichtig, d.h sie akzeptiert alle ZoneId-Typen. Beispiel: "Europe/Paris", "GMT-10", "UTC+7", "UT+05:30", "+9:30", "-08".
public static TemporalQuery<ZoneId> zone()
Diese TemporalQuery fragt ein Objekt temporalAccessor gemäß der folgenden Regel ab:
- Gibt TemporalQueries.zoneId().queryFrom(temporalAccessor) zurück, wenn es nicht null ist.
- Andernfalls geben Sie TemporalQueries.offset().queryFrom(temporalAccessor) zurück.
Somit gibt die Abfrage eines ZonedDateTime-Objekts zonedDateTime.getZone() zurück, während die Abfrage eines OffsetDateTime -Objekts offsetDateTime.getOffset() zurückgibt.
TemporalQueries_zone_ex1.java
TemporalQuery<ZoneId> query = TemporalQueries.zone();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneId zoneId = zonedDateTime.query(query);
System.out.println("zoneId: " + zoneId);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneId = offsetDateTime.query(query);
System.out.println("zoneId: " + zoneId);
Output:
zonedDateTime: 2021-07-10T00:45:45.503914+06:00[Asia/Bishkek]
zoneId: Asia/Bishkek
offsetDateTime: 2021-07-09T20:45:45.506205+02:00
zoneId: +02:00
Die Referenz der statischen Methode ZoneId.from(TemporalAccessor) kann als TemporalQuery verwendet werden, was dieser Methode entspricht, außer dass sie eine Ausnahme auslöst, wenn das Ergebnis nicht abgerufen werden kann.
TemporalQueries_zone_ex2.java
// Method referene
TemporalQuery<ZoneId> query = ZoneId::from; // Same as: TemporalQueries.zone()
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneId zoneId = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneId: " + zoneId);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneId = offsetDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneId: " + zoneId);
Output:
zonedDateTime: 2021-07-10T00:45:45.503914+06:00[Asia/Bishkek]
zoneId: Asia/Bishkek
offsetDateTime: 2021-07-09T20:45:45.506205+02:00
zoneId: +02:00
- ZoneId
- ZoneOffset
- ChronoZonedDateTime
- ZonedDateTime
- OffsetDateTime
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