API de date et d'heure Java 8

JavaJavaBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Java 8 a introduit une nouvelle API de date et d'heure qui est inspirée par la bibliothèque JodaTime. Elle surmonte les inconvénients de l'API de date existante. Dans ce laboratoire, nous allons apprendre à utiliser la nouvelle API de date et d'heure pour manipuler les dates et les heures.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/ConcurrentandNetworkProgrammingGroup(["Concurrent and Network Programming"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/output("Output") java/StringManipulationGroup -.-> java/strings("Strings") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("Class Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/date("Date") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/format("Format") java/ConcurrentandNetworkProgrammingGroup -.-> java/working("Working") java/SystemandDataProcessingGroup -.-> java/system_methods("System Methods") subgraph Lab Skills java/output -.-> lab-117466{{"API de date et d'heure Java 8"}} java/strings -.-> lab-117466{{"API de date et d'heure Java 8"}} java/classes_objects -.-> lab-117466{{"API de date et d'heure Java 8"}} java/class_methods -.-> lab-117466{{"API de date et d'heure Java 8"}} java/date -.-> lab-117466{{"API de date et d'heure Java 8"}} java/format -.-> lab-117466{{"API de date et d'heure Java 8"}} java/working -.-> lab-117466{{"API de date et d'heure Java 8"}} java/system_methods -.-> lab-117466{{"API de date et d'heure Java 8"}} end

Création d'instances de LocalDate

La classe LocalDate est utilisée pour représenter une date au format ISO standard (aaaa-mm-jj). Elle ne contient pas d'heure et ne prend pas en charge les fuseaux horaires.

Nous pouvons créer une instance de la classe LocalDate en utilisant la méthode now(). Elle capturera la date actuelle selon l'horloge du système.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currentDate = LocalDate.now();
        System.out.println("Date actuelle : " + currentDate);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

Date actuelle : 2021-08-13

Analyse d'une chaîne de date

Nous pouvons créer une instance de la classe LocalDate à partir d'une représentation sous forme de chaîne d'une date.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        String str = "2021-08-13";
        LocalDate date = LocalDate.parse(str);
        System.out.println("Date : " + date);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

Date : 2021-08-13

Méthodes plus et moins

Nous pouvons ajouter ou soustraire des jours, des mois ou des années à une date en utilisant la méthode plusDays() ou minusDays(). Nous avons également des méthodes similaires pour modifier les mois et les années.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currDate = LocalDate.now();
        LocalDate yesterday = currDate.minusDays(1);
        LocalDate tomorrow = currDate.plusDays(1);

        System.out.println("Date actuelle : " + currDate);
        System.out.println("Date de demain : " + tomorrow);
        System.out.println("Date d'hier : " + yesterday);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

Date actuelle : 2021-08-13
Date de demain : 2021-08-14
Date d'hier : 2021-08-12

Méthodes d'accès

La classe LocalDate contient plusieurs méthodes d'accès pour extraire différentes informations de la LocalDate, telles que le jour de la semaine ou le jour du mois, etc.

import java.time.DayOfWeek;
import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currDate = LocalDate.now();
        DayOfWeek dayOfWeek = currDate.getDayOfWeek();
        int dayOfMonth = currDate.getDayOfMonth();
        int dayOfYear = currDate.getDayOfYear();

        System.out.println("Date : " + currDate);
        System.out.println("Jour de la semaine : " + dayOfWeek);
        System.out.println("Jour du mois : " + dayOfMonth);
        System.out.println("Jour de l'année : " + dayOfYear);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

Date : 2021-08-13
Jour de la semaine : VENDREDI
Jour du mois : 13
Jour de l'année : 225

Comparaison de dates

Nous pouvons comparer des dates en utilisant les méthodes isBefore() et isAfter() pour vérifier laquelle est plus récente.

import java.time.LocalDate;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate currDate = LocalDate.now();
        LocalDate tomorrow = currDate.plusDays(1);
        LocalDate yesterday = currDate.minusDays(1);

        System.out.println("La date actuelle est après la date d'hier : " + currDate.isAfter(yesterday));
        System.out.println("La date actuelle est avant la date de demain : " + currDate.isBefore(tomorrow));
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

La date actuelle est après la date d'hier : true
La date actuelle est avant la date de demain : true

Création d'instances de LocalTime

Pour créer une instance de LocalTime, nous pouvons utiliser la méthode now(), of() ou parse(). La méthode now() utilisera l'horloge du système pour obtenir l'heure actuelle. Les méthodes of() et parse() peuvent créer un LocalTime selon les paramètres passés.

import java.time.LocalTime;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalTime currentTime = LocalTime.now();
        LocalTime t1 = LocalTime.of(5, 32, 44);
        LocalTime t2 = LocalTime.parse("05:32:44");

        System.out.println(currentTime);
        System.out.println(t1);
        System.out.println(t2);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

17:43:08.749240
05:32:44
05:32:44

Méthodes plus et moins

Nous pouvons utiliser les méthodes plus() et minus() pour manipuler les instances de LocalTime.

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalTime t1 = LocalTime.of(5, 32, 44);
        LocalTime t2 = t1.plus(2, ChronoUnit.HOURS);
        LocalTime t3 = t1.minusMinutes(10);

        System.out.println(t1);
        System.out.println(t2);
        System.out.println(t3);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

05:32:44
07:32:44
05:22:44

Création d'instances de LocalDateTime

La classe LocalDateTime est une combinaison des classes LocalDate et LocalTime. Une instance de LocalDateTime contient un composant de date et un composant d'heure.

import java.time.LocalDateTime;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDateTime currDateTime = LocalDateTime.now();
        LocalDateTime dt1 = LocalDateTime.of(2020, 8, 13, 5, 32);
        LocalDateTime dt2 = LocalDateTime.parse("2020-08-13T05:32");

        System.out.println(currDateTime);
        System.out.println(dt1);
        System.out.println(dt2);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

2021-08-13T17:46:48.837697
2020-08-13T05:32
2020-08-13T05:32

Travailler avec les fuseaux horaires

Les classes discutées ci-dessus ne prennent pas en charge les fuseaux horaires. La classe ZonedDateTime fournit cette fonctionnalité. Nous pouvons utiliser la classe ZoneId pour identifier différents fuseaux horaires.

import java.time.ZonedDateTime;
import java.time.ZoneId;

public class DateTimeExample {
    public static void main(String[] args) {
        ZonedDateTime zdt = ZonedDateTime.now();
        ZoneId zoneTokyo = ZoneId.of("Asia/Tokyo");
        ZonedDateTime zdtT = ZonedDateTime.now(zoneTokyo);
        ZoneId zoneLondon = ZoneId.of("Europe/London");
        ZonedDateTime zdtL = ZonedDateTime.now(zoneLondon);

        System.out.println(zdt);
        System.out.println(zdtT);
        System.out.println(zdtL);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

2021-08-13T18:09:25.352237+05:30[Asia/Calcutta]
2021-08-13T21:39:25.356244+09:00[Asia/Tokyo]
2021-08-13T13:09:25.357316+01:00[Europe/London]

Formatage des dates

Java 8 fournit une fonction format() pour formater une date en une chaîne de caractères à l'aide d'un motif particulier.

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        String dateStr1 = dateTime.format(DateTimeFormatter.ISO_WEEK_DATE);
        String dateStr2 = dateTime.format(DateTimeFormatter.BASIC_ISO_DATE);
        String dateStr3 = dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        String dateStr4 = dateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm:ss"));

        System.out.println(dateStr1);
        System.out.println(dateStr2);
        System.out.println(dateStr3);
        System.out.println(dateStr4);
    }
}

Enregistrez et exécutez le code en utilisant la commande suivante :

javac DateTimeExample.java && java DateTimeExample

Nous verrons la sortie ci-dessous :

2021-W32-5
20210813
2021-08-13T18:16:57.675704
13/08/2021 06:16:57

Récapitulatif

Dans ce laboratoire, nous avons appris à utiliser l'API de date et d'heure Java 8 pour manipuler les dates et les heures. Nous avons appris à créer des instances des classes LocalDate, LocalTime et LocalDateTime, à les manipuler à l'aide des méthodes plus() et minus(), et à obtenir des informations à partir d'elles à l'aide de méthodes d'accès. De plus, nous avons appris à travailler avec les fuseaux horaires à l'aide de la classe ZonedDateTime et à formater les dates à l'aide de la classe DateTimeFormatter.