devstory

Le Tutoriel de Java LocalDateTime

  1. LocalDateTime
  2. Static Factory methods
  3. isAfter(..), isBefore(..)
  4. format(DateTimeFormatter)
  5. getX() *
  6. get(TemporalField)
  7. getLong(TemporalField)
  8. toLocalDate()
  9. toLocalTime()
  10. atZone(ZoneId)
  11. atOffset(ZoneOffset)
  12. plusX(..) *
  13. plus(TemporalAmount)
  14. plus(long, TemporalUnit)
  15. minusX(..) *
  16. minus(TemporalAmount)
  17. minus(long, TemporalUnit)
  18. withX(..) *
  19. with(TemporalAdjuster)
  20. with(TemporalField, long)
  21. adjustInto(Temporal)
  22. query(TemporalQuery<R>)
  23. until(Temporal, TemporalUnit)
  24. isSupported(TemporalField)
  25. isSupported(TemporalUnit)

1. LocalDateTime

La classe LocalDateTime représente la date et l'heure locales dans le système de calendrier ISO. Elle n'inclut pas les informations de fuseau horaire.
public final class LocalDateTime
    implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable
La classe LocalDateTime se situe dans le package java.time. Comme les autres classes introduites dans Java 8 Date Time API, LocalDateTime est immuable, ce qui signifie que tous les calculs dans LocalDateTime créent un nouvel objet LocalDateTime. Il est donc sûr d'être utilisé dans un environnement multithreading.
  • Java 8 Date Time API Overview

2. Static Factory methods

La classe LocalDateTime ne fournit aucun constructeur, mais elle fournit des méthodes de fabrique statiques pour créer un nouvel objet :
public static LocalDateTime now()  

public static LocalDateTime now(ZoneId zone)  

public static LocalDateTime now(Clock clock)

public static LocalDateTime of(int year, Month month, int dayOfMonth,
                               int hour, int minute)

public static LocalDateTime of(int year, Month month, int dayOfMonth,
                               int hour, int minute, int second)

public static LocalDateTime of(int year, Month month, int dayOfMonth,
                               int hour, int minute, int second, int nanoOfSecond)

public static LocalDateTime of(int year, int month, int dayOfMonth,
                               int hour, int minute)

public static LocalDateTime of(int year, int month, int dayOfMonth,
                               int hour, int minute, int second)

public static LocalDateTime of(int year, int month, int dayOfMonth,
                               int hour, int minute, int second, int nanoOfSecond)

public static LocalDateTime of(LocalDate date, LocalTime time)

public static LocalDateTime ofInstant(Instant instant, ZoneId zone)

public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset)

public static LocalDateTime from(TemporalAccessor temporal)  

public static LocalDateTime parse(CharSequence text)

public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)
Créer un objet LocalDateTime représentant la date et l'heure actuelles à partir de l'horloge système et du fuseau horaire par défaut (Sur votre ordinateur).
// Ex: Current Date Time from the system clock in the default time-zone.
LocalDateTime dt1 = LocalDateTime.now();
System.out.println("dt1: " + dt1);

// Ex: Current Date Time from the specified clock.
Clock clock2 = Clock.systemDefaultZone();
LocalDateTime dt2 = LocalDateTime.now(clock2);
System.out.println("dt2: " + dt2);

// Ex: Current Date Time from the system clock in the specified time-zone.
ZoneId zoneId3 = ZoneId.systemDefault();
LocalDateTime dt3 = LocalDateTime.now(zoneId3);
System.out.println("dt3: " + dt3);
Output:
dt1: 2021-06-02T21:33:45.249967
dt2: 2021-06-02T21:33:45.250606
dt3: 2021-06-02T21:33:45.250714
Créer un objet LocalDateTime à partir des valeurs de date, mois, année, heure, minute, seconde, .. spécifiées :
// Ex: of(int year, Month month, int dayOfMonth, int hour, int minute)
LocalDateTime dt1 = LocalDateTime.of(2000, Month.MAY, 20, 13, 45, 30);  
System.out.println("dt1: " + dt1); // 2000-05-20T13:45:30

// Ex: of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
LocalDateTime dt2 = LocalDateTime.of(2000, 5, 20, 13, 45, 30, 12345);
System.out.println("dt2: " + dt2); // 2000-05-20T13:45:30.000012345
Créer un objet LocalDateTime en combinant les deux objets LocalDate et LocalTime :
LocalDate date = LocalDate.parse("2020-05-15");
LocalTime time = LocalTime.parse("13:45:30");
 
// Ex: of(LocalDate date, LocalTime time)
LocalDateTime dt  = LocalDateTime.of(date, time);
System.out.println("Date time: " + dt); // 2020-05-15T13:45:30
Créer un objet LocalDateTime à partir d'un objet TemporalAccessor :
// TemporalAccessor
ZonedDateTime z = ZonedDateTime.of(2016, 10, 12,
                                   15, 20, 30, 0,
                                   ZoneId.systemDefault());
System.out.println("ZonedDateTime: " + z); // 2016-10-12T15:20:30+06:00[Asia/Bishkek]

// from(TemporalAccessor temporal)
LocalDateTime dateTime = LocalDateTime.from(z);
System.out.println("dateTime: " + dateTime); // 2016-10-12T15:20:30
Créer un objet LocalDateTime à partir des objets Instant et ZoneId:
Instant instant = Instant.now();
ZoneId zoneId = ZoneId.systemDefault();

// ofInstant(Instant instant, ZoneId zone)
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, zoneId);

System.out.println("dateTime: " + dateTime); // 2021-06-02T21:07:39.970782
// Ex: ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset)
LocalDateTime dt1 = LocalDateTime.ofEpochSecond(0, 0, ZoneOffset.ofHours(-1));
System.out.println("dt1: " + dt1); // 1969-12-31T23:00

// Ex: ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset)
LocalDateTime dt2 = LocalDateTime.ofEpochSecond(0, 0, ZoneOffset.ofHours(1));
System.out.println("dt2: " + dt2); // 1970-01-01T01:00
Créer un objet LocalDateTime à partir de l'analyse d'un texte au format de date et d'heure :
// Default Format: yyyy-MM-ddTmm:HH:ss.SSS
LocalDateTime dt1 = LocalDateTime.parse("2011-11-20T13:45:30");
System.out.println("dt1: " + dt1); // 2011-11-20T13:45:30

// Default Format: yyyy-MM-ddTmm:HH:ss.SSS
LocalDateTime dt2 = LocalDateTime.parse("2011-11-20T13:45:30.12345");
System.out.println("dt2: " + dt2); // 2011-11-20T13:45:30.123450

// Ex: parse(CharSequence text, DateTimeFormatter formatter)
DateTimeFormatter fmt3 = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");

LocalDateTime dt3 = LocalDateTime.parse("20/11/2020 13:45:30", fmt3);
System.out.println("dt3: " + dt3); // 2020-11-20T13:45:30
  • DateTimeFormatter
  • Java Date Time Format Pattern

3. isAfter(..), isBefore(..)

La méthode isBefore(ChronoLocalDate) est utilisée pour vérifier si cet objet LocalDateTime se situe avant (before) un autre objet spécifié dans la chronologie.
// Inherited from ChronoLocalDateTime interface
public boolean isBefore(ChronoLocalDateTime<?> other)
La méthode isAfter(ChronoLocalDate) est utilisée pour vérifier si l'objet LocalDateTime se situe derrière (after) un autre objet spécifié dans la chronologie.
// Inherited from ChronoLocalDateTime interface
public boolean isAfter(ChronoLocalDateTime<?> other)
localDateTime1 is before localDateTime2.
  • Le Tutoriel de Java ChronoLocalDate

4. format(DateTimeFormatter)

Formater cet objet LocalDateTime par un autre DateTimeFormatter spécifié.
public String format(DateTimeFormatter formatter)
Par exemple :
LocalDateTime_format_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 5, 15, 20, 59);
System.out.println("localDateTime: " + localDateTime); // 2020-May-15 20:59
System.out.println();

// For example:
// '2011-12-03T10:15:30',
// '2011-12-03T10:15:30+01:00' if has offset
// '2011-12-03T10:15:30+01:00[Europe/Paris]' if has time-zone
DateTimeFormatter fmt1 = DateTimeFormatter.ISO_DATE_TIME;
System.out.println("ISO_DATE_TIME: " + localDateTime.format(fmt1)); // 2020-05-15T20:59:00  

// Custom Formatter:
DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SSS");  
// 15/05/2020 20:59:00.000
System.out.println("dd/MM/yyyy HH:mm:ss.SSS: " + localDateTime.format(fmt2));
  • Le Tutoriel de Java DateTimeFormatter
  • Java Date Time Format Pattern

5. getX() *

La méthode getYear() renvoie l'année représentée par ce LocalDateTime, ce qui équivaut à convoquer la méthode get(ChronoField.YEAR). Si vous souhaitez obtenir l'année de l'ère, convoquez get(ChronoField.YEAR_OF_ERA).
public int getYear()
public int getMonthValue()  
public Month getMonth()  
public int getDayOfMonth()  
public int getDayOfYear()   
public DayOfWeek getDayOfWeek()

public int getHour()  
public int getMinute()
public int getSecond()
public int getNano()
Par exemple :
LocalDateTime_getX_ex1.java
LocalDateTime dateTime = LocalDateTime.parse("2020-05-15T13:45:30.12345");
System.out.println("Date Time: " + dateTime); // 2020-05-15T13:45:30.123450
System.out.println();
 
System.out.println("getDayOfYear(): " + dateTime.getDayOfYear()); // 136
System.out.println("getDayOfMonth(): " + dateTime.getDayOfMonth()); // 15
System.out.println("getYear(): " + dateTime.getYear());  // 2020
System.out.println("getMonth(): " + dateTime.getMonth());  // Month.MAY (enum)
System.out.println("getMonthValue(): " + dateTime.getMonthValue()); // 5
System.out.println("getDayOfWeek(): " + dateTime.getDayOfWeek()); // DayOfWeek.FRIDAY (enum)

System.out.println("getHour(): " + dateTime.getHour());  // 13
System.out.println("getMinute(): " + dateTime.getMinute()); // 45
System.out.println("getSecond(): " + dateTime.getSecond()); // 30
System.out.println("getNano(): " + dateTime.getNano());  // 123450000

6. get(TemporalField)

Renvoyer la valeur du champ spécifié de cet objet LocalDateTime sous la forme d'un nombre entier de 32 bits.
public int get(TemporalField field)
Remarque : Certains champs peuvent ne pas être pris en charge par LocalDateTime et une UnsupportedTemporalTypeException sera levée. Pour se rassurer, utiliser la méthode isSupported(TemporalField) pour vérifier si un certain champ est pris en charge par LocalDateTime.
Par exemple :
LocalDateTime_get_field_ex1.java
LocalDateTime dt = LocalDateTime.parse("2020-05-15T13:45:30.12345");
System.out.println("Date Time: " + dt); // 2020-05-15T13:45:30.123450
System.out.println();

// int get(TemporalField field)
System.out.println("DAY_OF_MONTH: " + dt.get(ChronoField.DAY_OF_MONTH)); // 15
System.out.println("DAY_OF_WEEK: " + dt.get(ChronoField.DAY_OF_WEEK)); // 5
System.out.println("DAY_OF_YEAR: " + dt.get(ChronoField.DAY_OF_YEAR)); // 136
System.out.println("ERA: " + dt.get(ChronoField.ERA)); // 1
System.out.println("YEAR: " + dt.get(ChronoField.YEAR)); // 2020
System.out.println("YEAR_OF_ERA: " + dt.get(ChronoField.YEAR_OF_ERA)); // 2020
System.out.println("ALIGNED_DAY_OF_WEEK_IN_MONTH: " + dt.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH)); // 1
System.out.println("ALIGNED_DAY_OF_WEEK_IN_YEAR: " + dt.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR)); // 3
System.out.println("ALIGNED_WEEK_OF_MONTH: " + dt.get(ChronoField.ALIGNED_WEEK_OF_MONTH)); // 3
System.out.println("ALIGNED_WEEK_OF_YEAR: " + dt.get(ChronoField.ALIGNED_WEEK_OF_YEAR)); // 20

// Use getLong() instead
// System.out.println("PROLEPTIC_MONTH: " + dt.get(ChronoField.PROLEPTIC_MONTH)); // 24244
// System.out.println("EPOCH_DAY: " + dt.get(ChronoField.EPOCH_DAY)); // 18397

// Time:
System.out.println("AMPM_OF_DAY: " + dt.get(ChronoField.AMPM_OF_DAY)); // 13
System.out.println("CLOCK_HOUR_OF_AMPM: " + dt.get(ChronoField.CLOCK_HOUR_OF_AMPM)); // 1
System.out.println("CLOCK_HOUR_OF_DAY: " + dt.get(ChronoField.CLOCK_HOUR_OF_DAY)); // 13
System.out.println("HOUR_OF_AMPM: " + dt.get(ChronoField.HOUR_OF_AMPM)); // 1
System.out.println("HOUR_OF_DAY: " + dt.get(ChronoField.HOUR_OF_DAY)); // 13

System.out.println("MILLI_OF_DAY: " + dt.get(ChronoField.MILLI_OF_DAY)); // 49530123
System.out.println("MILLI_OF_SECOND: " + dt.get(ChronoField.MILLI_OF_SECOND)); // 123
System.out.println("MINUTE_OF_DAY: " + dt.get(ChronoField.MINUTE_OF_DAY)); // 825

System.out.println("MINUTE_OF_HOUR: " + dt.get(ChronoField.MINUTE_OF_HOUR)); // 45

System.out.println("MICRO_OF_SECOND: " + dt.get(ChronoField.MICRO_OF_SECOND)); // 123450
System.out.println("NANO_OF_SECOND: " + dt.get(ChronoField.NANO_OF_SECOND)); // 123450000

System.out.println("SECOND_OF_DAY: " + dt.get(ChronoField.SECOND_OF_DAY)); // 49530
System.out.println("SECOND_OF_MINUTE: " + dt.get(ChronoField.SECOND_OF_MINUTE)); // 30

// Use getLong() instead
// System.out.println("NANO_OF_DAY: " + dt.get(ChronoField.NANO_OF_DAY)); // 49530123450000

// Unsupported
// System.out.println("INSTANT_SECONDS: " + dt.get(ChronoField.INSTANT_SECONDS));
// System.out.println("OFFSET_SECONDS: " + dt.get(ChronoField.OFFSET_SECONDS));
  • ChronoField
  • TemporalField

7. getLong(TemporalField)

Renvoyer la valeur du champ spécifié de cet objet LocalDateTime sous la forme d'un nombre entier de 64 bits.
public long getLong(TemporalField field)
Remarque : Certains champs peuvent ne pas être pris en charge par LocalDateTime et une UnsupportedTemporalTypeException sera levée. Pour se rassurer, utiliser la méthode isSupported(TemporalField) pour vérifier si un certain champ est pris en charge par LocalDateTime.
Par exemple :
LocalDateTime_getLong_field_ex1.java
LocalDateTime dt = LocalDateTime.parse("2020-05-15T13:45:30.12345");
System.out.println("Date Time: " + dt); // 2020-05-15T13:45:30.123450
System.out.println();

// long getLong(TemporalField field)
System.out.println("DAY_OF_MONTH: " + dt.getLong(ChronoField.DAY_OF_MONTH)); // 15
System.out.println("DAY_OF_WEEK: " + dt.getLong(ChronoField.DAY_OF_WEEK)); // 5
System.out.println("DAY_OF_YEAR: " + dt.getLong(ChronoField.DAY_OF_YEAR)); // 136
System.out.println("ERA: " + dt.getLong(ChronoField.ERA)); // 1
System.out.println("YEAR: " + dt.getLong(ChronoField.YEAR)); // 2020
System.out.println("YEAR_OF_ERA: " + dt.getLong(ChronoField.YEAR_OF_ERA)); // 2020
System.out.println("ALIGNED_DAY_OF_WEEK_IN_MONTH: " + dt.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH)); // 1
System.out.println("ALIGNED_DAY_OF_WEEK_IN_YEAR: " + dt.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR)); // 3
System.out.println("ALIGNED_WEEK_OF_MONTH: " + dt.getLong(ChronoField.ALIGNED_WEEK_OF_MONTH)); // 3
System.out.println("ALIGNED_WEEK_OF_YEAR: " + dt.getLong(ChronoField.ALIGNED_WEEK_OF_YEAR)); // 20

//
System.out.println("PROLEPTIC_MONTH: " + dt.getLong(ChronoField.PROLEPTIC_MONTH)); // 24244
System.out.println("EPOCH_DAY: " + dt.getLong(ChronoField.EPOCH_DAY)); // 18397

// Time:
System.out.println("AMPM_OF_DAY: " + dt.getLong(ChronoField.AMPM_OF_DAY)); // 13
System.out.println("CLOCK_HOUR_OF_AMPM: " + dt.getLong(ChronoField.CLOCK_HOUR_OF_AMPM)); // 1
System.out.println("CLOCK_HOUR_OF_DAY: " + dt.getLong(ChronoField.CLOCK_HOUR_OF_DAY)); // 13
System.out.println("HOUR_OF_AMPM: " + dt.getLong(ChronoField.HOUR_OF_AMPM)); // 1
System.out.println("HOUR_OF_DAY: " + dt.getLong(ChronoField.HOUR_OF_DAY)); // 13

System.out.println("MILLI_OF_DAY: " + dt.getLong(ChronoField.MILLI_OF_DAY)); // 49530123
System.out.println("MILLI_OF_SECOND: " + dt.getLong(ChronoField.MILLI_OF_SECOND)); // 123
System.out.println("MINUTE_OF_DAY: " + dt.getLong(ChronoField.MINUTE_OF_DAY)); // 825

System.out.println("MINUTE_OF_HOUR: " + dt.getLong(ChronoField.MINUTE_OF_HOUR)); // 45

System.out.println("MICRO_OF_SECOND: " + dt.getLong(ChronoField.MICRO_OF_SECOND)); // 123450
System.out.println("NANO_OF_SECOND: " + dt.getLong(ChronoField.NANO_OF_SECOND)); // 123450000

System.out.println("SECOND_OF_DAY: " + dt.getLong(ChronoField.SECOND_OF_DAY)); // 49530
System.out.println("SECOND_OF_MINUTE: " + dt.getLong(ChronoField.SECOND_OF_MINUTE)); // 30

//  
System.out.println("NANO_OF_DAY: " + dt.getLong(ChronoField.NANO_OF_DAY)); // 49530123450000

// Unsupported
// System.out.println("INSTANT_SECONDS: " + dt.getLong(ChronoField.INSTANT_SECONDS));
// System.out.println("OFFSET_SECONDS: " + dt.getLong(ChronoField.OFFSET_SECONDS));
  • TemporalField
  • ChronoField

8. toLocalDate()

Renvoyer la partie LocalDate de cet objet LocalDateTime.
// Inherited from ChronoLocalDateTime interface
public LocalDate toLocalDate()
Par exemple :
LocalDateTime_toLocalDate_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 05, 15, 13, 30, 45, 123);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45.000000123
System.out.println();

LocalDate localDate = localDateTime.toLocalDate();
System.out.println("localDate: " + localDate); // 2020-05-15

9. toLocalTime()

Renvoyer la partie LocalTime de cet objet LocalDateTime.
// Inherited from ChronoLocalDateTime interface
public LocalTime toLocalTime()
Par exemple :
LocalDateTime_toLocalTime_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 05, 15, 13, 30, 45, 123);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45.000000123
System.out.println();

LocalTime localTime = localDateTime.toLocalTime();
System.out.println("localTime: " + localTime); // 13:30:45.000000123

10. atZone(ZoneId)

La méthode atZone(ZoneId) est utilisée pour combiner cet objet LocalDateTime avec l'objet ZoneId spécifié afin de créer un objet ZonedDateTime.
// Inherited from ChronoLocalDateTime interface
public ZonedDateTime atZone(ZoneId zone)
Par exemple :
LocalDateTime_atZone_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 05, 15, 13, 30, 45, 123);
System.out.println(localDateTime); // 2020-05-15T13:30:45.000000123
System.out.println();

ZoneId parisZoneId = ZoneId.of("Europe/Paris");
ZonedDateTime zonedDateTime = localDateTime.atZone(parisZoneId);
System.out.println(zonedDateTime); // 2020-05-15T13:30:45.000000123+02:00[Europe/Paris]

11. atOffset(ZoneOffset)

La méthode atOffset(ZoneOffset) est utilisée pour combiner cet objet LocalDateTime avec l'objet ZoneOffset spécifié pour créer un objet OffsetDateTime.
public OffsetDateTime atOffset(ZoneOffset offset)
Par exemple :
LocalDateTime_atOffset_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 05, 15, 13, 30, 45, 123);
System.out.println(localDateTime); // 2020-05-15T13:30:45.000000123
System.out.println();

ZoneOffset zoneOffset2H30 = ZoneOffset.ofHoursMinutes(2, 30);

OffsetDateTime offsetDateTime = localDateTime.atOffset(zoneOffset2H30);
System.out.println(offsetDateTime); // 2020-05-15T13:30:45.000000123+02:30
  • ZoneOffset
  • OffsetDateTime

12. plusX(..) *

Les méthodes plusSeconds(seconds) renvoient une copie de cet objet LocalDateTime avec un montant spécifié de secondes ajoutées.
Les méthodes plusNanos(nanos), plusHeures(heures),... sont également interprétées comme leurs noms indiquent.
public LocalDateTime plusYears(long years)  

public LocalDateTime plusMonths(long months)  

public LocalDateTime plusWeeks(long weeks)  

public LocalDateTime plusDays(long days)  

public LocalDateTime plusHours(long hours)

public LocalDateTime plusMinutes(long minutes)  

public LocalDateTime plusSeconds(long seconds)  

public LocalDateTime plusNanos(long nanos)
Par exemple :
LocalDateTime_plusX_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();

// plusDays(long daysToAdd)
LocalDateTime localDateTime1 = localDateTime.plusDays(10);
System.out.println("localDateTime1: " + localDateTime1); // 2020-05-25T13:30:45

LocalDateTime localDateTime2 = localDateTime.plusDays(-15);
System.out.println("localDateTime2: " + localDateTime2); // 2020-04-30T13:30:45

// plusHours(long hoursToAdd)
LocalDateTime localDateTime3 = localDateTime.plusHours(12);
System.out.println("localDateTime3: " + localDateTime3); // 2020-05-16T01:30:45

13. plus(TemporalAmount)

Renvoyer une copie de cet objet LocalDateTime avec une valeur spécifiée ajoutée.
// Inherited from Temporal interface
public LocalDateTime plus(TemporalAmount amountToAdd)
Par exemple :
LocalDateTime_plus_amount_ex1.java
LocalDateTime 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.plus(amount1);
System.out.println("localDateTime1: " + localDateTime1); // 2020-05-20T13:30:45

// plus(TemporalAmount amountToAdd)
LocalDateTime from = LocalDateTime.of(2020, 5, 10, 0, 0, 0);
LocalDateTime to = LocalDateTime.of(2020, 5, 12, 12, 0, 0);

TemporalAmount amount2 = Duration.between(from, to); // 2 days 12 hours
LocalDateTime localDateTime2 = localDateTime.plus(amount2);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-18T01:30:45

14. plus(long, TemporalUnit)

Renvoyer une copie de cet objet LocalDateTime avec une valeur spécifiée ajoutée dans l'unité donnée.
// Inherited from Temporal interface
public LocalDateTime plus(long amountToAdd, TemporalUnit unit)
Par exemple :
LocalDateTime_plus_unit_ex1.java
LocalDateTime 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.plus(20, ChronoUnit.DAYS);
System.out.println("localDateTime1: " + localDateTime1); // 2020-06-04T13:30:45

// plus(long amountToAdd, TemporalUnit unit)
LocalDateTime localDateTime2 = localDateTime.plus(50, ChronoUnit.MINUTES);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-15T14:20:45

15. minusX(..) *

Les méthodes minusSeconds(seconds) renvoient une copie de cet objet LocalDateTime avec un montant de secondes spécifié soustrait.
Les méthodes minusNanos(nanos), minusHours(hours),... sont également interprétées comme leurs noms indiquent.
public LocalDateTime minusYears(long years)  

public LocalDateTime minusMonths(long months)  

public LocalDateTime minusWeeks(long weeks)  

public LocalDateTime minusDays(long days)  

public LocalDateTime minusHours(long hours)  

public LocalDateTime minusMinutes(long minutes)  

public LocalDateTime minusSeconds(long seconds)  

public LocalDateTime minusNanos(long nanos)
Par exemple :
LocalDateTime_minusX_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();

// minusDays(long daysToSubtract)
LocalDateTime localDateTime1 = localDateTime.minusDays(10);
System.out.println("localDateTime1: " + localDateTime1); // 2020-05-05T13:30:45

LocalDateTime localDateTime2 = localDateTime.minusDays(-15);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-30T13:30:45

// minusHours(long monthsToSubtract)
LocalDateTime localDateTime3 = localDateTime.minusHours(15);
System.out.println("localDateTime3: " + localDateTime3); // 2020-05-14T22:30:45

16. minus(TemporalAmount)

Renvoyer une copie de cet objet LocalDateTime avec une valeur spécifiée soustraite.
// Inherited from Temporal interface
public LocalDateTime minus(TemporalAmount amountToSubtract)
Par exemple :
LocalDateTime_minus_amount_ex1.java
LocalDateTime localDateTime = LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();

// minus(TemporalAmount amountToSubtract)
TemporalAmount amount1 = Period.ofDays(20);
LocalDateTime localDateTime1 = localDateTime.minus(amount1);
System.out.println("localDateTime1: " + localDateTime1); // 2020-04-25T13:30:45

// minus(TemporalAmount amountToSubtract)
LocalDateTime from = LocalDateTime.of(2020, 5, 10, 0, 0, 0);
LocalDateTime to = LocalDateTime.of(2020, 5, 12, 15, 0, 0);

TemporalAmount amount2 = Duration.between(from, to); // 2 days 15 hours
LocalDateTime localDateTime2 = localDateTime.minus(amount2);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-12T22:30:45

17. minus(long, TemporalUnit)

Renvoyer une copie de cet objet LocalDateTime avec une valeur spécifiée soustraite dans l'unité donnée.
// Inherited from Temporal interface
public LocalDateTime minus(long amountToSubtract, TemporalUnit unit)
Par exemple :
LocalDateTime_minus_unit_ex1.java
LocalDateTime localDateTime =  LocalDateTime.of(2020, 5, 15, 13, 30, 45);
System.out.println("localDateTime: " + localDateTime); // 2020-05-15T13:30:45
System.out.println();

// minus(long amountToSubtract, TemporalUnit unit)
LocalDateTime localDateTime1 = localDateTime.minus(20, ChronoUnit.DAYS);
System.out.println("localDateTime1: " + localDateTime1); // 2020-04-25T13:30:45

// minus(long amountToSubtract, TemporalUnit unit)
LocalDateTime localDateTime2 = localDateTime.minus(50, ChronoUnit.MINUTES);
System.out.println("localDateTime2: " + localDateTime2); // 2020-05-15T12:40:45

18. withX(..) *

La méthode withYear(year) renvoie une copie de cet objet LocalDateTime avec l'année modifiée à la valeur spécifiée.
Les autres méthodes telles que withMonths(months), withDayOfMonth(dayOfMonth),... sont également interprétées comme leurs noms indiquent.
public LocalDateTime withYear(int year)

public LocalDateTime withMonth(int month)

public LocalDateTime withDayOfMonth(int dayOfMonth)

public LocalDateTime withDayOfYear(int dayOfYear)

public LocalDateTime withHour(int hour)

public LocalDateTime withMinute(int minute)

public LocalDateTime withSecond(int second)

public LocalDateTime withNano(int nanoOfSecond)
La méthode withYear(year) renvoie une copie de cet objet LocalDateTime avec l'année modifiée. Si le jour du mois n'est pas valide pour cette année-là, il sera remplacé par le dernier jour du mois valide.
LocalDateTime_withYear_ex1.java
LocalDateTime ldt1 = LocalDateTime.parse("2020-02-29T13:30:45").withYear(2024);  
System.out.println("ldt1: " + ldt1); // 2024-02-29T13:30:45

LocalDateTime ldt2 = LocalDateTime.parse("2020-02-29T13:30:45").withYear(2019); // Important Note!
System.out.println("ldt2: " + ldt2); // 2019-02-28T13:30:45

LocalDateTime ldt3 = LocalDateTime.parse("2020-02-28T13:30:45").withYear(2019);  
System.out.println("ldt3: " + ldt3); // 2019-02-28T13:30:45

LocalDateTime ldt4 = LocalDateTime.parse("2020-02-21T13:30:45").withYear(2019);  
System.out.println("ldt4: " + ldt4); // 2019-02-21T13:30:45
La méthode withMonth(month) renvoie une copie de cet objet LocalDateTime avec le mois modifié. Si le jour du mois n'est pas valide pour cette année-là, il sera remplacé par le dernier jour du mois valide.
LocalDateTime_withMonth_ex1.java
LocalDateTime ldt1 = LocalDateTime.parse("2020-03-31T13:30:45").withMonth(2); // Important Note!
System.out.println("ldt1: " + ldt1); // 2020-02-29T13:30:45

LocalDateTime ldt2 = LocalDateTime.parse("2020-03-31T13:30:45").withMonth(2); // Important Note!
System.out.println("ldt2: " + ldt2); // 2020-02-29T13:30:45

LocalDateTime ldt3 = LocalDateTime.parse("2020-03-29T13:30:45").withMonth(2);  
System.out.println("ldt3: " + ldt3); // 2020-02-29T13:30:45

LocalDateTime ldt4 = LocalDateTime.parse("2020-03-21T13:30:45").withMonth(2);  
System.out.println("ldt4: " + ldt4); // 2020-02-21T13:30:45

19. with(TemporalAdjuster)

Renvoyer une copie de cet objet LocalDateTime, avec les données de date et d'heure ajustées par l'objet TemporalAdjuster.
// Inherited from Temporal interface
public LocalDateTime with(TemporalAdjuster adjuster)
Par exemple :
LocalDateTime_with_adjuster_ex1.java
LocalDateTime now = LocalDateTime.now();
System.out.println("Now is: " + now);
System.out.println();

// TemporalAdjuster: First day-of-month
TemporalAdjuster adjuster1 = TemporalAdjusters.firstDayOfMonth();
LocalDateTime firstDayOfMonth = now.with(adjuster1);
System.out.println("firstDayOfMonth: " + firstDayOfMonth);

// TemporalAdjuster: Next monday.
TemporalAdjuster adjuster2 = TemporalAdjusters.next(DayOfWeek.MONDAY);
LocalDateTime nextMonday = now.with(adjuster2);
System.out.println("nextMonday: " + nextMonday);

// TemporalAdjuster: First day of next year.
TemporalAdjuster adjuster3 = TemporalAdjusters.firstDayOfNextYear();
LocalDateTime firstDayOfNextYear = now.with(adjuster3);
System.out.println("firstDayOfNextYear: " + firstDayOfNextYear);
Output:
Now is: 2021-07-08T18:01:05.965972

firstDayOfMonth: 2021-07-01T18:01:05.965972
nextMonday: 2021-07-12T18:01:05.965972
firstDayOfNextYear: 2022-01-01T18:01:05.965972

20. with(TemporalField, long)

Renvoyer une copie de cet objet LocalDateTime avec le champ spécifié modifié par la nouvelle valeur.
// Inherited from Temporal interface
public LocalDateTime with(TemporalField field, long newValue)
Dans certains cas, la modification du champ spécifié peut entraîner la non-validité de la date de résultat, par exemple le fait de changer le mois du 31 janvier à février rendrait le jour du mois invalide. Dans des cas comme celui-ci, ce problème a été traité par cette méthode. En règle générale, il choisira la date de validité précédente, qui serait le dernier jour valide de février dans cet exemple.
LocalDateTime_with_field_ex1.java
LocalDateTime myDateTime = LocalDateTime.parse("2021-05-29T13:30:45");

System.out.println("myDateTime is: " + myDateTime); // 2021-05-29T13:30:45
System.out.println("myDateTime day of week: " + myDateTime.get(ChronoField.DAY_OF_WEEK));  // 6
System.out.println("myDateTime day of month: " + myDateTime.get(ChronoField.DAY_OF_MONTH)); // 29
System.out.println();

LocalDateTime localDateTime1 =    myDateTime.with(ChronoField.DAY_OF_WEEK, 3);   
System.out.println("localDateTime1: " + localDateTime1); // 2021-05-26T13:30:45

LocalDateTime localDateTime2 =    myDateTime.with(ChronoField.DAY_OF_MONTH, 10);  
System.out.println("localDateTime2: " + localDateTime2);  // 2021-05-10T13:30:45

// February 2021 has only 28 days.
LocalDateTime localDateTime3 =    myDateTime.with(ChronoField.MONTH_OF_YEAR, 2);  
System.out.println("localDateTime3: " + localDateTime3);  // 2021-02-28T13:30:45  (***)
Output:
myDateTime is: 2021-05-29T13:30:45
myDateTime day of week: 6
myDateTime day of month: 29

localDateTime1: 2021-05-26T13:30:45
localDateTime2: 2021-05-10T13:30:45
localDateTime3: 2021-02-28T13:30:45
  • ChronoField
  • TemporalField

21. adjustInto(Temporal)

La méthode AdjustInto(Temporal) renvoie une copie de l'objet Temporal spécifié avec les données de date et d'heure ajustées pour qu'elles ressemblent à cet objet LocalDateTime.
// Inherited from TemporalAdjuster interface
public Temporal adjustInto(Temporal temporal)
A la base, ces deux approches ci-dessous sont similaires :
Temporal copiedTemporal = thisLocalDateTime.adjustInfo(aTemporal);  // (1)
// Same as:
Temporal copiedTemporal = aTemporal.with(thisLocalDateTime);           // (2)
Par exemple :
LocalDateTime_adjustInto_ex1.java
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Ho_Chi_Minh"));
System.out.println("Now is: " + zonedDateTime);

LocalDateTime localDateTime = LocalDateTime.parse("1999-01-01T00:30:30");
zonedDateTime = (ZonedDateTime) localDateTime.adjustInto(zonedDateTime);
System.out.println("After adjusting: " + zonedDateTime);
Output:
Now is: 2021-07-08T20:05:56.439468+07:00[Asia/Ho_Chi_Minh]
After adjusting: 1999-01-01T00:30:30+07:00[Asia/Ho_Chi_Minh]

22. query(TemporalQuery<R>)

Interroger cet objet LocalDateTime avec l'objet TemporalQuery donné pour extraire des informations.
// Inherited from TemporalAccessor interface
public <R> R query(TemporalQuery<R> query)
Voir plus d'exemples à ce sujet dans l'article sur TemporalQuery :

23. until(Temporal, TemporalUnit)

Calculer la durée jusqu'à un autr repère de date-heure en termes d'unité spécifiée.
// Inherited from Temporal interface
public long until(Temporal endExclusive, TemporalUnit unit)
Par exemple :
LocalDateTime_until_ex1.java
LocalDateTime localDateTime_from = LocalDateTime.of(2020, 5, 15, 0, 0, 0);
System.out.println("Date Time From: " + localDateTime_from); // 2020-05-15T00:00

LocalDateTime localDateTime_to = LocalDateTime.of(2020, 5, 15, 13, 30, 59);  
System.out.println("Date Time To: " + localDateTime_to); // 2020-05-15T13:30:59
System.out.println();

long hours = localDateTime_from.until(localDateTime_to, ChronoUnit.HOURS);
System.out.println("hours: " + hours); // 13

long minutes = localDateTime_from.until(localDateTime_to, ChronoUnit.MINUTES);
System.out.println("minutes: " + minutes); // 810
Vous pouvez également utiliser la méthode TemporalUnit.between(Temporal,Temporal) pour obtenir le même résultat :
TemporalUnit_between_ex1.java
LocalDateTime localDateTime_from = LocalDateTime.of(2020, 5, 15, 0, 0, 0);
System.out.println("Date Time From: " + localDateTime_from); // 2020-05-15T00:00

LocalDateTime localDateTime_to = LocalDateTime.of(2020, 5, 15, 13, 30, 59);  
System.out.println("Date Time To: " + localDateTime_to); // 2020-05-15T13:30:59
System.out.println();

long hours = ChronoUnit.HOURS.between(localDateTime_from, localDateTime_to);
System.out.println("hours: " + hours); // 13

long minutes = ChronoUnit.MINUTES.between(localDateTime_from, localDateTime_to);
System.out.println("minutes: " + minutes); // 810

24. isSupported(TemporalField)

Vérifier si un TemporalField donné est pris en charge par cet objet LocalDateTime.
// Inherited from TemporalAccessor interface
public boolean isSupported(TemporalField field)
En règle générale, LocalDateTime prend en charge le(s) TemporalField(s) standard(s) suivant(s) :
  • ChronoField.NANO_OF_SECOND
  • ChronoField.NANO_OF_DAY
  • ChronoField.MICRO_OF_SECOND
  • ChronoField.ChronoField.MICRO_OF_DAY
  • ChronoField.MILLI_OF_SECOND
  • ChronoField.MILLI_OF_DAY
  • ChronoField.SECOND_OF_MINUTE
  • ChronoField.SECOND_OF_DAY
  • ChronoField.MINUTE_OF_HOUR
  • ChronoField.MINUTE_OF_DAY
  • ChronoField.HOUR_OF_AMPM
  • ChronoField.CLOCK_HOUR_OF_AMPM
  • ChronoField.HOUR_OF_DAY
  • ChronoField.CLOCK_HOUR_OF_DAY
  • ChronoField.AMPM_OF_DAY
  • ChronoField.DAY_OF_WEEK
  • ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH
  • ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR
  • ChronoField.DAY_OF_MONTH
  • ChronoField.DAY_OF_YEAR
  • ChronoField.EPOCH_DAY
  • ChronoField.ALIGNED_WEEK_OF_MONTH
  • ChronoField.ALIGNED_WEEK_OF_YEAR
  • ChronoField.MONTH_OF_YEAR
  • ChronoField.PROLEPTIC_MONTH
  • ChronoField.YEAR_OF_ERA
  • ChronoField.YEAR
  • ChronoField.ERA
  • TemporalField
  • ChronoField

25. isSupported(TemporalUnit)

Vérifier si une TemporalUnit donnée est prise en charge par cet objet LocalDateTime.
// Inherited from Temporal interface
public boolean isSupported(TemporalUnit unit)
En règle générale, LocalDateTime prend en charge les TemporalUnit(s)standard suivantes :
  • ChronoUnit.NANOS
  • ChronoUnit.MICROS
  • ChronoUnit.MILLIS
  • ChronoUnit.SECONDS
  • ChronoUnit.MINUTES
  • ChronoUnit.HOURS
  • ChronoUnit.HALF_DAYS
  • ChronoUnit.DAYS
  • ChronoUnit.WEEKS
  • ChronoUnit.MONTHS
  • ChronoUnit.YEARS
  • ChronoUnit.DECADES
  • ChronoUnit.CENTURIES
  • ChronoUnit.MILLENNIA
  • ChronoUnit.ERAS