Skip to content

Latest commit

 

History

History
163 lines (104 loc) · 3.44 KB

datetime.adoc

File metadata and controls

163 lines (104 loc) · 3.44 KB

La modélisation du temps

L’API Date

  • Disponible depuis les premières versions de Java

  • Très déconseillée

La classe Date

The class Date represents a specific instant in time, with millisecond precision.

!

date

Exemple d’utilisation

Date date = new Date();

int hours = date.getHours();

date.setHours(hours + 1);

Problème avec Date

La classe confond la notion d’instant, et la mesure de cet instant dans un référentiel spécifique (p.e. le calendrier grégorien)

La classe Calendar

The Calendar class is an abstract class that provides methods for converting between a specific instant in time and a set of calendar fields such as YEAR, MONTH, DAY_OF_MONTH, HOUR, and so on, and for manipulating the calendar fields, such as getting the date of the next week.

!

calendar

Exemple d’utilisation

Calendar now = Calendar.getInstance();

int hours = now.get(Calendar.HOUR_OF_DAY);

now.set(Calendar.HOUR_OF_DAY, 1);
now.add(Calendar.HOUR_OF_DAY, 1);
now.roll(Calendar.HOUR_OF_DAY, 1);

Problème avec Calendar

Calendar est une classe mutable: son état peut changer, ce qui rend compliqué son utilisation.

La nouvelle API Date/Time

  • Corrige les problèmes de Date et de Calendar

  • Disponible depuis Java 8 dans le JDK

  • Directement inspiré de la librairie Joda Time

Instant

An instantaneous point on the time-line.

!

instant

Duration et Period

A time-based amount of time, such as '34.5 seconds'.
A date-based amount of time in the ISO-8601 calendar system, such as '2 years, 3 months and 4 days'.

!

duration period

Exemple d’utilisation

Instant now = Instant.now();

Instant in5hours4minutes =
    instant.plus(Duration.ofHours(5).plusMinutes(4));

!

LocalDate

A date without a time-zone in the ISO-8601 calendar system, such as 2007-12-03.

LocalTime

A time without a time-zone in the ISO-8601 calendar system, such as 10:15:30.

LocalDateTime

A date-time without a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30.

!

localdate

Exemple d’utilisation

LocalDate now = LocalDate.now();

LocalDate christmasThisYear =
    LocalDate.of(now.getYear(), 12, 25);

Temporal adjusters

temporaladjusters

Exemple d’utilisation

LocalDate now = LocalDate.now();

LocalDate thirdMondayFromNowOn = now
    .with(TemporalAdjusters.next(DayOfWeek.MONDAY))
    .with(TemporalAdjusters.next(DayOfWeek.MONDAY))
    .with(TemporalAdjusters.next(DayOfWeek.MONDAY));

Autres dates disponibles

other dates

Formatage et analyse

formatter

Exemple d’utilisation

LocalDate now = LocalDate.now();
DateTimeFormatter formatter =
    DateTimeFormatter.ofPattern("yyyy/MM/dd");
String text = now.format(formatter);
System.out.println(text);