English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java 8En publiant un nouveau Date-API Time (JSR 310) pour renforcer davantage la gestion des dates et des heures.
Dans les anciennes versions de Java, les API de date et heure présentaient de nombreux problèmes, notamment :
Non thread-safe − java.util.Date n'est pas thread-safe, toutes les classes de date sont modifiables, ce qui est l'un des plus grands problèmes des classes de date de Java.
Mauvaise conception − Date de Java/Les définitions des classes de temps ne sont pas uniformes. Les classes de date se trouvent dans les paquets java.util et java.sql, ainsi que les classes utilisées pour le formatage et l'analyse dans le paquet java.text. java.util.Date contient à la fois la date et l'heure, tandis que java.sql.Date ne contient que la date. L'inclusion de ces deux classes dans le paquet java.sql n'est pas raisonnable. De plus, elles ont le même nom, ce qui est un très mauvais design.
Gestion des fuseaux horaires difficile − La classe de date ne fournit pas d'internationalisation, et n'a pas de support pour les fuseaux horaires. Par conséquent, Java a introduit les classes java.util.Calendar et java.util.TimeZone, mais elles ont également tous les problèmes mentionnés précédemment.
Java 8 dans java.time Le paquet fournit de nombreux nouveaux API. Voici deux des API les plus importants :
Local (local) − Simplifie la gestion des dates et heures, sans problèmes de fuseau horaire.
Zoned (fuseau horaire) − Gère les dates et heures par le biais du fuseau horaire spécifié.
Le nouveau paquet java.time couvre tous les traitements des dates, des heures et des dates/Opérations sur l'heure, le fuseau horaire, les instants, les processus (during) et les horloges (clock).
LocalDate/Les classes LocalTime et LocalDateTime peuvent être utilisées lorsque la gestion des fuseaux horaires n'est pas nécessaire. Voici un exemple de code :
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("L'heure actuelle: " + currentTime); LocalDate date1 = currentTime.toLocalDate(); System.out.println("date1: \ + date1); Month mois = currentTime.getMonth(); int day = currentTime.getDayOfMonth(); int seconds = currentTime.getSecond(); System.out.println("mois: " + mois +", jour: " + jour +", secondes: " + secondes); LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012); System.out.println("date2: \ + date2); // 12 décembre 2014 LocalDate date3 = LocalDate.of(2014, Month.DÉCEMBRE, 12); System.out.println("date3: \ + date3); // 22 heures 15 minutes LocalTime date4 = LocalTime.of(22, 15); System.out.println("date4: \ + date4); // Analyse de la chaîne LocalTime date5 = LocalTime.parse("20:15:30); System.out.println("date5: \ + date5); } }
Execute the above script, the output will be:
$ javac Java8Tester.java $ java Java8Tester L'heure actuelle: 2016-04-15T16:55:48.668 date1: 2016-04-15 mois: AVRIL, jour: 15, secondes: 48 date2: 2012-04-10T16:55:48.668 date3: 2014-12-12 date4: 22:15 date5: 20:15:30
Si nous devons tenir compte des fuseaux horaires, nous pouvons utiliser l'API de date et heure des fuseaux horaires :
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() { // Get the current date and time 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("Current time zone: "); + currentZone); } }
Execute the above script, the output will be:
$ javac Java8Tester.java $ java Java8Tester date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai] ZoneId: Europe/Paris Current time zone: Asia/Shanghai