JavaRush /Blog Java /Random-FR /Guide Java 8. Partie 2.
ramhead
Niveau 13

Guide Java 8. Partie 2.

Publié dans le groupe Random-FR

API de dates

Java 8 contient de toutes nouvelles API de date et d'heure dans le package java.time. La nouvelle API Date est comparable à la bibliothèque Joda-Time , mais ce n'est pas la même chose. Les exemples suivants couvriront les parties les plus importantes de la nouvelle API.
Horloge
L'horloge donne accès à la date et à l'heure actuelles. Les horloges connaissent les fuseaux horaires et peuvent donc être utilisées à la place de System.currentTimeMillis() pour renvoyer l'heure actuelle en millisecondes. Ce type de précision temporelle est également représenté par la classe Instant . Les instants peuvent être utilisés pour créer des objets java.util.Date hérités . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Fuseaux horaires
Les fuseaux horaires sont représentés par la classe abstraite ZoneId . Ils sont facilement accessibles à l’aide des méthodes d’usine statistique. Les fuseaux horaires définissent des décalages importants pour la conversion entre la date et l'heure instantanées et locales. System.out.println(ZoneId.getAvailableZoneIds()); // prints all available timezone ids ZoneId zone1 = ZoneId.of("Europe/Berlin"); ZoneId zone2 = ZoneId.of("Brazil/East"); System.out.println(zone1.getRules()); System.out.println(zone2.getRules()); // ZoneRules[currentStandardOffset=+01:00] // ZoneRules[currentStandardOffset=-03:00]
Heure locale
LocalTime affiche l'heure sans fuseau horaire, par exemple 17:30:15. L'exemple suivant crée deux objets d'heure locale pour les fuseaux horaires définis ci-dessus. Nous comparons ensuite les deux objets et calculons la différence en heures et minutes entre eux. LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); System.out.println(now1.isBefore(now2)); // false long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); System.out.println(hoursBetween); // -3 System.out.println(minutesBetween); // -239 LocalTime est livré avec diverses méthodes d'usine pour faciliter l'instanciation, y compris l'analyse des chaînes. LocalTime late = LocalTime.of(23, 59, 59); System.out.println(late); // 23:59:59 DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedTime(FormatStyle.SHORT) .withLocale(Locale.GERMAN); LocalTime leetTime = LocalTime.parse("13:37", germanFormatter); System.out.println(leetTime); // 13:37
Date Locale
LocalDate affiche une date spécifique, par exemple 2014-03-11. Les instances sont immuables et fonctionnent de la même manière que LocalTime. L'exemple montre comment calculer une nouvelle date en ajoutant ou en soustrayant des jours, des mois ou des années. Gardez à l'esprit que chaque opération sur un objet renvoie un nouvel objet. LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); LocalDate yesterday = tomorrow.minusDays(2); LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4); DayOfWeek dayOfWeek = independenceDay.getDayOfWeek(); System.out.println(dayOfWeek); // FRIDAY Analyser LocalDate à partir d'une chaîne est aussi simple que d'analyser LocalTime : DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter); System.out.println(xmas); // 2014-12-24
DateHeure Locale
LocalDateTime affiche la date/heure. Il s'agit d'une combinaison de la date et de l'heure indiquées ci-dessus, en un seul exemplaire. Les instances LocalDateTime sont immuables et fonctionnent de la même manière que LocalTime et LocalDate. Nous pouvons utiliser des méthodes pour récupérer les valeurs des propriétés d'instance dont nous avons besoin : LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59); DayOfWeek dayOfWeek = sylvester.getDayOfWeek(); System.out.println(dayOfWeek); // WEDNESDAY Month month = sylvester.getMonth(); System.out.println(month); // DECEMBER long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY); System.out.println(minuteOfDay); // 1439 avec des informations supplémentaires sur le fuseau horaire, l'instance peut être convertie en instance instantanée. Les instants peuvent être facilement convertis en anciens types héritant de java.util.Date. Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 Le formatage d'une date-heure fonctionne de la même manière que le formatage d'une date ou d'une heure. Au lieu d'utiliser des formats de date prédéfinis, nous pouvons utiliser des formats définis manuellement. DateTimeFormatter formatter = DateTimeFormatter .ofPattern("MMM dd, yyyy - HH:mm"); LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter); String string = formatter.format(parsed); System.out.println(string); // Nov 03, 2014 - 07:13 Contrairement à java.text.NumberFormat, le nouveau DateTimeFormatter est immuable et thread-safe. Pour plus d'informations sur la syntaxe d'écriture des formats, lisez ici .

Annotations

Les annotations dans Java 8 sont répétables. Regardons un exemple pour illustrer comment cela fonctionne. Pour commencer, nous allons définir un wrapper d'annotations qui stocke un tableau d'annotations valides : @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 nous permet d'utiliser plusieurs annotations du même type en déclarant l'annotation @Repeatable. Option 1 : Utiliser l'annotation du conteneur (ancienne école) (Java 8 nous permet d'utiliser plusieurs annotations du même type en déclarant une annotation @Repeatable .) Option 1 : Utiliser le conteneur d'annotations (ancienne école) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} Option 2 : Utiliser des annotations répétables ( nouvelle fonctionnalité) @Hint("hint1") @Hint("hint2") class Person {} En utilisant la deuxième option, le compilateur Java définit implicitement l'annotation @Hint. Ceci est important pour lire les informations d’annotation par réflexion. Hint hint = Person.class.getAnnotation(Hint.class); System.out.println(hint); // null Hints hints1 = Person.class.getAnnotation(Hints.class); System.out.println(hints1.value().length); // 2 Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class); System.out.println(hints2.length); // 2 Bien que nous n'ayons pas déclaré l' annotation @Hints pour la classe Person , elle peut être lue à l'aide de la méthode getAnnotation(Hints.class) . Cependant, une méthode plus pratique est getAnnotationsByType , qui donne accès à toutes les annotations à l'aide de l' annotation @Hint . De plus, l'utilisation des annotations dans Java 8 s'étend à deux objectifs : @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

C'est tout

Mon didacticiel de programmation Java 8 est terminé. Si vous souhaitez en savoir plus sur toutes les nouvelles classes et fonctionnalités de l'API du JDK 8, lisez simplement mon prochain article. Cela vous aidera à comprendre toutes les nouvelles classes et fonctionnalités cachées du JDK 8, telles que Arrays.parallelSort , StampedLock et CompletableFuture .
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION