Le Tutoriel de Java Temporal
1. Temporal
L'interface Temporal simule un concept commun entre les notions de date, d'heure et de décalage horaire. Il fournit des méthodes de base pour obtenir des informations à partir de ces objets.
public interface Temporal extends TemporalAccessor
L'interface Temporal s'étend de l'interface TemporalAccessor, et ils sont un peu différents :
TemporalAccessor | Simuler un concept commun entre les concepts de date, d'heure, de décalage horaire, de décalage de fuseau horaire et d'ère. |
Temporal | Simuler un concept commun entre les notions de date, de décalage horaire. |
Ainsi, l'Interface Temporal réduit le nombre de concepts qu'il représente par rapport à TemporalAccessor. Il fournit des méthodes plus détaillées de ces concepts.
Liste des sous-classes ou enum qui implémentent l'interface Temporal :
- 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)
Vérifier si l'unité spécifiée est prise en charge par ce Temporal.
public boolean isSupported(TemporalUnit unit)
Cette vérification est nécessaire avant d'utiliser la méthode plus(long,TemporalUnit) ou minus(long,TemporalUnit). Si vous convoquez ces méthodes avec une unité non prise en charge, une exception sera levée.
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
Vous pouvez également utiliser la méthode TemporalUnit.isSupportedBy(Temporal) pour vérifier si un TemporalUnit particulier est pris en charge par un Temporal donné.
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)
Renvoyer une copie de cet objet Temporal avec des informations ajustées par l'objet TemporalAdjuster spécifié.
public default Temporal with(TemporalAdjuster adjuster)
En règle générale, il existe 2 façons d'ajuster un objet Temporal, dont la deuxième approche est recommandée :
Temporal adjustedCopy = temporalAdjuster.adjustInto(temporal); // (1)
Temporal adjustedCopy = temporal.with(temporalAdjuster); // (2)
Par exemple:
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
Voir aussi l'article sur TemporalAdjuster pour avoir plus d'exemples :
5. with(TemporalField, long)
Renvoyer une copie de cet objet Temporal avec le champ (field) spécifié déjà modifié.
public Temporal with(TemporalField field, long newValue)
Dans certains cas, la modification d'un champ peut rendre invalide un autre champ. Par exemple, le 31 janvier, le passage de janvier à février rendra le jour du mois invalide. Cette méthode changera le jour du mois à la date valide la plus proche.
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)
Renvoyer une copie de ce Temporal avec une quantité de temps ajoutée.
public default Temporal plus(TemporalAmount amount)
Par exemple:
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
La méthode Temporal.plus(TemporalAmount) fonctionne de manière similaire à la méthode TemporalAmount.addTo(Temporal):
// This method is defined in the TemporalAmount interface:
public Temporal addTo(Temporal temporal)
7. plus(long, TemporalUnit)
Renvoyer une copie de ce Temporal avec la valeur ajoutée spécifiée.
public Temporal plus(long amountToAdd, TemporalUnit unit)
Par exemple:
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
La méthode Temporal.plus(long,TemporalUnit) fonctionne de manière similaire à la méthode 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)
Renvoyer une copie de ce Temporal avec le temps spécifié soustrait.
public default Temporal minus(TemporalAmount amount)
Par exemple:
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
La méthode Temporal.minus(TemporalAmount) fonctionne de manière similaire à la méthode TemporalAmount.subtractFrom(Temporal) :
// This method is defined in the TemporalAmount interface:
public Temporal subtractFrom(Temporal temporal)
9. minus(long, TemporalUnit)
Renvoyer une copie de ce Temporal avec le montant spécifié soustrait dans l'unité spécifiée.
public default Temporal minus(long amountToSubtract, TemporalUnit unit)
Par exemple:
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)
Calculer la durée d'un Temporal à un autre Temporal dans les unités spécifiées.
(**) L'unité spécifiée doit être prise en charge par les deux objets Temporal participant à la méthode, sinon une DateTimeException sera levée.
public long until(Temporal endExclusive, TemporalUnit unit)
Par exemple:
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
Vous pouvez également utiliser la méthode TemporalUnit.between(Temporal,Temporal) dans les cas similaires:
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
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