Le Tutoriel de Java TemporalQueries
1. TemporalQueries
La classe TemporalQueries fournit des méthodes statiques pour obtenir des objets TemporalQuerycourants et utiles. Les informations reçues de ces TemporalQuery peuvent être :
- Chronology
- LocalDate
- LocalTime
- ZoneOffset
- Precision
- Zone
- ZoneId
Voir aussi l'article sur l'interface TemporalQuery avec des exemples sur TemporalQuery de base et personnalisé.
Il existe deux manières d'interroger un objet TemporalAccessor, dont la deuxième approche est recommandée.
// These two lines are equivalent, but the second approach is recommended
information = temporalQuery.queryFrom(temporalAccessor); // (1)
information = temporalAccessor.query(temporalQuery); // (2)
2. TemporalQueries methods
Toutes les méthodes fournies par TemporalQueries sont statiques et renvoient un objet TemporalQuery.
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()
Renvoyer TemporalQuery<TemporalUnit> pour interroger la plus petite unité prise en charge par un TemporalAcccessor.
public static TemporalQuery<TemporalUnit> precision()
Tableau des classes qui implémentent l'interface TemporalAccessor disponible dans le JDK et la plus petite unité prise en charge.
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 |
Par exemple:
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()
Renvoyer TemporalQuery<Chronology> pour obtenir des informations sur la Chronology associée à un TemporalAccessor.
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
La référence de la méthode statique Chronology.from(TemporalAccessor) peut être utilisée comme une TemporalQuery, ce qui correspond à cette méthode, sauf qu'elle peut lever une exception si le résultat ne peut pas être obtenu.
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()
Renvoyer un TemporalQuery<LocalDate> pour récupérer le composant LocalDate à partir d'un objet TemporalAccessor. Le résultat de la requête est null si ce composant n'existe pas.
public static TemporalQuery<LocalDate> localDate()
Par exemple:
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
La référence de la méthode statique LocalDate.from(TemporalAccessor) peut être utilisée comme une TemporalQuery, ce qui correspond à cette méthode, sauf qu'elle peut lever une exception si le résultat ne peut pas être obtenu.
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()
Renvoyer un TemporalQuery<LocalTime> pour récupérer le composant LocalTime d'un objet TemporalAccessor. Le résultat de la requête est null si ce composant n'existe pas.
public static TemporalQuery<LocalTime> localTime()
Par exemple:
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
La référence de la méthode statique LocalTime.from(TemporalAccessor) peut être utilisée comme une TemporalQuery, ce qui correspond à cette méthode, sauf qu'elle peut lever une exception si le résultat ne peut pas être obtenu.
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()
Renvoyer un TemporalQuery<ZoneId> qui récupère les informations d'ID de fuseau horaire à partir d'un objet TemporalAccessor. Le résultat de cette requête est strict, ce qui signifie qu'elle renvoie un identifiant de fuseau horaire pour une région, comme "Europe/Paris", "GMT-10", "UTC+7", "UT+05:30". Les identifiants de fuseau horaire basés sur les décalages ne sont pas considérés comme stricts, tels que "+08:30", "-07".
public static TemporalQuery<ZoneId> zoneId()
L'objet TemporalQuery<ZoneId> renvoyé par cette méthode est uniquement utilisé pour interroger l'objet ZonedDateTime ou ChroneZonedDateTime et obtenir le ZoneId qui lui est associé. Les requêtes avec d'autres TemporalAccessor(s) comme OffsetDateTime, LocalDateTime, .. renverront null.
Si vous avez besoin d'une requête de fuseau horaire moins stricte qui accepte tous les types d'ID(s) de fuseau horaire, y compris les ID(s) de fuseau horaire basés sur le décalage, utilisez la méthode 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()
Renvoyer un TemporalQuery<ZoneOffset> pour récupérer les informations de décalage de fuseau horaire à partir d'un objet TemporalAccessor.
public static TemporalQuery<ZoneOffset> offset()
Par exemple:
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
La référence de la méthode statique ZoneOffset.from(TemporalAccessor) peut être utilisée comme une TemporalQuery, ce qui correspond à cette méthode, sauf qu'elle peut lever une exception si le résultat ne peut pas être obtenu.
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()
Renvoyer un TemporalQuery<ZoneId> qui récupère les informations d'ID de fuseau horaire à partir d'un objet TemporalAccessor. Le résultat de cette requête est modéré, ce qui signifie qu'il accepte tous les types de ZoneId. Par exemple : "Europe/Paris", "GMT-10", "UTC+7", "UT+05:30", "+9:30", "-08".
public static TemporalQuery<ZoneId> zone()
Cette TemporalQuery interroge un objet temporalAccessor selon la règle suivante :
- Renvoyer TemporalQueries.zoneId().queryFrom(temporalAccessor) s'il n'est pas null.
- Sinon, renvoyer TemporalQueries.offset().queryFrom(temporalAccessor).
Ainsi, l'interrogation d'un objet ZonedDateTime renverra zonedDateTime.getZone(), alors que l'interrogation d'un objet OffsetDateTime renverra offsetDateTime.getOffset().
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
La référence de la méthode statique ZoneId.from(TemporalAccessor) peut être utilisée comme une TemporalQuery, ce qui correspond à cette méthode, sauf qu'elle lève une exception si le résultat ne peut pas être obtenu.
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
Tutoriels Java Date Time
- Le Tutoriel de Java ZoneId
- Le Tutoriel de Java Temporal
- Le Tutoriel de Java Period
- Le Tutoriel de Java TemporalAdjusters
- Le Tutoriel de Java MinguoDate
- Le Tutoriel de Java TemporalAccessor
- Le Tutoriel de Java JapaneseEra
- Le Tutoriel de Java HijrahDate
- Le Tutoriel de Java Date, Time
- Qu'est-ce que l'heure d'été (DST)?
- Le Tutoriel de Java LocalDate
- Le Tutoriel de Java LocalTime
- Le Tutoriel de Java LocalDateTime
- Le Tutoriel de Java ZonedDateTime
- Le Tutoriel de Java JapaneseDate
- Le Tutoriel de Java Duration
- Le Tutoriel de Java TemporalQuery
- Le Tutoriel de Java TemporalAdjuster
- Le Tutoriel de Java ChronoUnit
- Le Tutoriel de Java TemporalQueries
Show More
- Tutoriels Java Web Service
- Tutoriels de programmation Java Servlet/JSP
- Tutoriels de JavaFX
- Tutoriels de programmation Java SWT
- Tutoriels Java Oracle ADF
- Java Basic
- Tutoriels de Java Collections Framework
- Tutoriels Java IO
- Tutoriels Struts2
- Tutoriels Spring Boot
- Tutoriels Spring Cloud
- Tutoriels Maven
- Tutoriels Gradle