API Date Time de Java 8

Java 8 新特性Nouveautés de Java 8


Java 8 renforce davantage la gestion des dates et des heures en publiant la nouvelle API Date-Time (JSR 310).

Dans l'ancienne version de Java, l'API date-heure présentait de nombreux problèmes, notamment :

  • Non thread-safe− java.util.Date n'est pas thread-safe, et toutes les classes de date sont mutables. C'est l'un des plus gros problèmes des classes de date de Java.

  • Mauvaise conception− Les définitions des classes date/heure de Java ne sont pas cohérentes. Les classes de date existent à la fois dans les packages java.util et java.sql. De plus, les classes de formatage et d'analyse syntaxique sont définies dans le package java.text. java.util.Date contient à la fois la date et l'heure, tandis que java.sql.Date ne contient que la date. Le placer dans le package java.sql n'est pas raisonnable. En outre, ces deux classes portent le même nom, ce qui constitue en soi une très mauvaise conception.

  • Gestion problématique des fuseaux horaires− Les classes de date ne fournissent pas d'internationalisation et ne prennent pas en charge les fuseaux horaires. Par conséquent, Java a introduit les classes java.util.Calendar et java.util.TimeZone, mais elles présentent également tous les problèmes ci-dessus.

Java 8, dans le packagejava.time, fournit de nombreuses nouvelles API. Les deux suivantes sont parmi les API les plus importantes :

  • Local (local)− Simplifie la gestion date-heure, sans le problème des fuseaux horaires.

  • Zoned (fuseau horaire)− Gère la date-heure avec le fuseau horaire spécifié.

Le nouveau package java.time couvre toutes les opérations de gestion des dates, des heures, des date/heure, des fuseaux horaires, des instants, des processus (durant) et de l'horloge.


API Date-Heure locale

Les classes LocalDate/LocalTime et LocalDateTime peuvent être utilisées dans les cas où la gestion des fuseaux horaires n'est pas nécessaire. Le code est le suivant :

Fichier Java8Tester.java

import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.time.Month; public class Java8Tester { public static void main(String args[]){ Java8Tester java8tester = new Java8Tester(); java8tester.testLocalDateTime(); } public void testLocalDateTime(){ //Obtenir la date et l'heure actuelles LocalDateTime currentTime = LocalDateTime.now(); System.out.println("Heure actuelle :" + currentTime); LocalDate date1 = currentTime.toLocalDate(); System.out.println("date1: " + date1); Month month = currentTime.getMonth(); int day = currentTime.getDayOfMonth(); int seconds = currentTime.getSecond(); System.out.println("Mois :" + month +", Jour:" + day +", Seconde:" + seconds); LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012); System.out.println("date2: " + date2); // 12 décembre 2014 LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12); System.out.println("date3: " + date3); //22 heures 15 minutes LocalTime date4 = LocalTime.of(22, 15); System.out.println("date4: " + date4); //Analyser la chaîne LocalTime date5 = LocalTime.parse("20:15:30"); System.out.println("date5: " + date5); } }

En exécutant le script ci-dessus, la sortie est :

$ javac Java8Tester.java 
$ java Java8Tester
当前时间: 2016-04-15T16:55:48.668
date1: 2016-04-15
月: APRIL, 日: 15, 秒: 48
date2: 2012-04-10T16:55:48.668
date3: 2014-12-12
date4: 22:15
date5: 20:15:30

API Date-Heure zonée

Si nous devons prendre en compte les fuseaux horaires, nous pouvons utiliser l'API de date-heure zonée :

Fichier Java8Tester.java

import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]){ Java8Tester java8tester = new Java8Tester(); java8tester.testZonedDateTime(); } public void testZonedDateTime(){ //Obtenir la date et l'heure actuelles ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]"); System.out.println("date1: " + date1); ZoneId id = ZoneId.of("Europe/Paris"); System.out.println("ZoneId: " + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("Fuseau horaire actuel :" + currentZone); } }

En exécutant le script ci-dessus, la sortie est :

$ javac Java8Tester.java 
$ java Java8Tester
date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai]
ZoneId: Europe/Paris
当期时区: Asia/Shanghai

Java 8 新特性Nouveautés de Java 8

Autres extensions