Original: http://it.deepinmind.com/java/2015/03/17/20-examples-date-ndate-difrom-java8.html
En plus des expressions Lambda, du flux et de plusieurs petites améliorations, Java 8 a également introduit un nouvel ensemble de temps et de date de la date. Les dates, les calendriers et le traitement du temps de Java ont toujours été critiqués, en particulier, il décide de définir Java.util.Date comme modifié et utiliser SimpledateFormat en sécurité non-thread. Il semble que Java ait réalisé qu'il devait fournir un meilleur support pour les fonctions de temps et de date, ce qui est également une bonne chose pour la communauté qui est habituée à utiliser la base de données Time Joda. Le plus grand avantage de cette nouvelle bibliothèque d'heure et de date est qu'il définit certains concepts liés à l'heure et à la date. et période. Dans le même temps, il emprunte également certains avantages de la bibliothèque Joda, comme la distinction entre les personnes et les machines pour distinguer la date de temps. Java 8 utilise toujours le système de calendrier ISO, et contrairement à ses prédécesseurs, les classes du package Java.Time ne sont pas dissuasables et à fil. La nouvelle API HEURE et DATE est située dans le package Java.Time.
La nouvelle bibliothèque ajoute également ZoneOffset et zoné pour fournir une meilleure prise en charge du fuseau horaire. Avec la nouvelle DateTimeFormatter, l'analyse et le formatage de la date après la date sont devenues nouvelles. Il suffit de le mentionner, j'écrivais cet article lorsque Java était sur le point de lancer cette nouvelle fonctionnalité pour le moment, vous constaterez donc que le moment de l'exemple est l'année dernière. Si vous exécutez ces exemples, les valeurs qu'ils renvoient doivent être correctes.
Quelqu'un m'a demandé quelle est la meilleure façon d'apprendre une nouvelle bibliothèque? Ma réponse est de l'utiliser dans des projets réels. Il y aura une variété de besoins dans un vrai projet, qui promouvra les développeurs pour explorer et étudier cette nouvelle bibliothèque. En bref, seule la tâche elle-même vous promouvra vraiment d'explorer et d'apprendre. La nouvelle API de date et d'heure de Java 8 est la même. Afin d'apprendre cette nouvelle bibliothèque de Java 8, j'ai créé 20 exemples axés sur les tâches ici. Commençons par une tâche simple. disant qu'il est dit de développer une application des rappels pour découvrir une date spécifique telle que l'anniversaire, le dimanche anniversaire, la date suivante du compte, combien de jours y a-t-il pour la prochaine date de première date ou d'expiration de la carte de crédit.
Il y a une classe appelée LocalDate dans Java 8, qui peut être utilisée pour représenter la date d'aujourd'hui. Cette classe est légèrement différente de java.util.date, car elle ne contient que la date et n'a pas de temps. Par conséquent, si vous avez seulement besoin d'indiquer la date au lieu du temps, vous pouvez l'utiliser.
LocalDate Today = LocalDate.Now ();
Vous pouvez voir qu'il crée aujourd'hui mais n'inclut pas les informations temporelles. Il forme également le format de date et le sort.
La classe LocalDate fournit des moyens très pratiques d'utiliser les attributs de date et d'autres dattes qui peuvent être utilisés pour extraire. En utilisant ces méthodes, vous pouvez obtenir n'importe quel attribut de date dont vous avez besoin et il n'est plus nécessaire d'utiliser une classe telle que java.util.calendar:
LocalDate aujourd'hui = localDate.Now (); int Année, mois, jour); Sortie actuelle Date locale: 2014-01-14 Année: 2014 Mois: 1 jour: 14
On peut voir qu'il est très simple d'obtenir les informations annuelles dans Java 8. Il n'a qu'à utiliser la méthode Getter correspondante, pas de mémoire, très intuitive. Vous pouvez le comparer avec l'écriture du mois et du jour en cours à Java.
Dans le premier exemple, nous voyons qu'il est très simple de générer la date du jour à travers la méthode statique, mais via une autre méthode d'usine très utile localDate.of (), vous pouvez créer n'importe quelle date. L'année, le mois, puis renvoie une instance locale équivalente. Une autre bonne nouvelle sur cette méthode est qu'elle n'a pas fait d'erreurs dans l'API auparavant. Ce que vous écrivez ici, c'est ce que vous écrivez ici, par exemple, dans l'exemple suivant, il représente le 14 janvier, il n'y a pas de logique cachée.
LocalDate DateOfBirth = localDate.of (2010, 01, 14);
On peut voir que la date de création est ce que nous écrivons, 14 janvier 2014.
En parlant des tâches réelles de temps de traitement et de date en réalité, on est courant pour vérifier si deux dates sont égales. Vous pouvez souvent rencontrer s'il faut juger si aujourd'hui est une journée spéciale, comme l'anniversaire, l'anniversaire ou les vacances. Parfois, vous vous donnerez une date afin que vous puissiez vérifier si c'est une certaine journée. L'exemple suivant vous aidera à effectuer ces tâches dans Java 8. Comme vous le pensez, LocalDate a réécrit la méthode égaux pour comparer la date, comme indiqué ci-dessous:
LocalDate Date1 = LocalDate.of (2014, 01, 14); 2014-01-14 et Date1 2014-01-14 sont la même date
Dans cet exemple, nos deux dates de comparaison sont égales. En même temps, si vous obtenez une chaîne de date formatée dans le code, vous devez le résoudre comme une date avant de pouvoir le comparer. Vous pouvez comparer cet exemple pour comparer la comparaison précédemment de Java, et vous constaterez que c'est bien mieux.
Il existe également une tâche pratique liée à la date de temps en Java pour vérifier les événements en double. Si vous travaillez dans une entreprise de commerce électronique, il y aura un tel module qui enverra des souhaits d'anniversaire aux utilisateurs et leur donnera des salutations sur chaque fête importante, comme Noël, Thanksgiving, en Inde, il peut être possible en Inde. est Deepawali. Comment déterminer s'il s'agit d'un festival ou d'un incident répété à Java? Utilisez la classe du jour du mois. Cette catégorie est combinée par le mois et n'inclut pas les informations annuelles, ce qui signifie que vous pouvez l'utiliser pour représenter certains des jours qui semblent répétés chaque année. Bien sûr, il existe d'autres combinaisons, comme la classe du mois d'année. Il est également incapable de changer et de filmer en toute sécurité comme d'autres types dans la nouvelle bibliothèque temporelle, et c'est également une classe de valeur. Voyons comment utiliser le jour du mois pour vérifier une date en double:
LocalDate Dtealday Birthday.Of (2010, 01, 14); Println ("Beaucoup de retours heureux de la journée !!");Bien que l'année soit différente, aujourd'hui est le jour de l'anniversaire, vous verrez donc une bénédiction d'anniversaire dans la production. Vous pouvez ajuster l'heure du système et exécuter le programme pour voir si cela peut vous rappeler quand le prochain anniversaire est.
Ceci est très similaire à la date en cours dans le premier exemple. Cette fois, nous utilisons une classe appelée localtime. Ici, vous pouvez également utiliser une méthode d'usine statique maintenant () pour obtenir l'heure actuelle. Le format par défaut est HH: MM: SS: NNN, et le NNN ici est des nanosecondes. Il peut être comparé à la façon d'obtenir l'heure actuelle avec Java 8.
Localtime Time = LocalTime.Now ();
On peut voir que l'heure actuelle n'inclut pas la date, car Localtime n'a que l'heure et aucune date.
Plusieurs fois, nous devons augmenter le temps futur à chaque minute ou seconde. Java 8 fournit non seulement des classes inchangées et de filetage, mais il fournit également des méthodes plus pratiques telles que Plushours () pour remplacer la méthode Add () d'origine. Soit dit en passant, ces méthodes renvoient une référence à une nouvelle instance locale, car localtime est immuable, n'oubliez pas de stocker cette nouvelle référence.
Localtime time = local.now (); : 33.369
Vous pouvez voir qu'après 2 heures de l'heure actuelle, il est 16: 33: 33.369. Maintenant, vous pouvez le comparer à une ancienne façon d'ajouter ou de réduire l'ancienne voie à Java. À première vue, vous savez dans quelle direction est le meilleur.
Ceci est similaire à l'exemple précédent des deux heures précédentes. LocalDate est utilisé pour indiquer la date sans temps. Parce que le LocalDate est également immuable, toute opération de modification renvoie un nouvel exemple, alors n'oubliez pas de l'enregistrer.
LocalDate Nextweek = Today.Plus (1, Chronounit.weeks); IS: 2014-01-14 Date après 1 semaine: 2014-01-21
Vous pouvez voir quelle est la date après 7 jours. Vous pouvez utiliser cette méthode pour augmenter un mois, un an, une heure, une minute ou même dix ans, vérifier la classe Chronounit dans l'API Java pour obtenir plus d'options.
Ceci est la suite de l'exemple précédent. Dans l'exemple ci-dessus, nous avons appris à utiliser la méthode plus () de LocalDate pour augmenter la date de la date, de la semaine ou du mois.
LocalDate Présentez-vous aujourd'hui. "+ Nextyear); Sortie: date avant 1 an: 2013-01-14 Date après 1 an: 2015-01-14
On peut voir qu'il y a deux ans au total, l'un est 2013, et l'autre est 2015, qui est l'année précédente et après 2014.
Java 8 est livré avec une classe d'horloge, vous pouvez l'utiliser pour obtenir l'heure, la date ou l'heure instantanées actuelles dans un certain fuseau horaire. Vous pouvez utiliser Clock pour remplacer System.CurrentTimeInMillis () et Timezone.getDefault ().
// Renvoie le temps actuel en fonction de votre horloge système et définie sur UTC. .SystemDefaultZone ();
Vous pouvez utiliser la date spécifiée pour comparer avec cette horloge, par exemple, comme suit:
Classe publique myClass {horloge privée;Si vous devez faire face aux dates de différents fuseaux horaires, cela est tout à fait pratique.
Il s'agit également d'une tâche courante dans les projets réels. Comment jugez-vous si une certaine date est devant ou derrière une autre date, ou tout simplement égale? Dans le Java 8, la classe LocalDate a une méthode ISBEFore () et ISAfter () qui peut être utilisée pour comparer deux dates. Si la date de la méthode d'appel est antérieure à la date donnée, la méthode isBefore () renvoie vrai.
LocalDate tomomorrow = localDate.of (2014, 1, 15); ; Hier.Sefore (aujourd'hui) {System.out.println ("Hier est le jour avant aujourd'hui");On peut voir que la date de Java 8 est relativement simple. Pas besoin d'utiliser une autre classe comme Calendar pour effectuer des tâches similaires.
Java 8 sépare non seulement la date et l'heure, mais aussi parfois les régions. Il existe déjà plusieurs groupes liés aux fuseaux horaires. Il équivaut à la classe Gregoriancalendar avant le Java 8. En utilisant cette classe, vous pouvez convertir l'heure locale en temps correspondant dans un autre fuseau horaire, comme l'exemple suivant:
// Date et heure avec le fuseau horaire dans Java 8 ZoneId America = ZoneId.of ("American / News"); Time Zone: "+ DATAETTHIELINENNEWYork); Sortie: Date et heure actuelles dans un fuseau horaire particulier: 2014-01-14T16: 33.373-05: 00 [American / New_york]Il peut être comparé au temps de convertir l'heure locale en temps GMT. Soit dit en passant, comme avant le Java 8, le texte du fuseau horaire correspondant ne doit pas être confondu, sinon vous rencontrerez une telle exception:
Exception dans Thread "Main" java.time.zone.zonerseException: ID de relais inconnu: Asie / Tokyo sur Lesprovider.java:272) à java.time.zone.zonerulesprovider.getrules (zonerulesprovider.java:227) à java. time.zoneregy.ofid (zoneregy.java:120) sur java.time.zoneid.of (zoneid.java:403) à java.time.zoneid.o f (zoneid.java: 351)
Tout comme le jour du mois exprime une journée en double, Yearmonth est une autre combinaison. Vous pouvez utiliser cette classe pour savoir combien de jours ce mois-ci, Longuentofmonth () Cette méthode renvoie le nombre de jours de cette instance, ce qui est très utile pour vérifier s'il était de 28 jours en février ou 29 jours.
Yearmonth CurrentyEarmonth = Yearmonth.Now (); ;;
Ce n'est pas compliqué. Si vous voulez toujours répéter la roue, vous pouvez voir ce code.
if (Today.Sisapyear ()) {System.out.println ("Cette année est un an");Vous pouvez vérifier pendant quelques années pour voir si les résultats sont corrects.
Une autre tâche courante consiste à calculer le nombre de jours, combien de semaines ou d'années sont incluses entre les deux dates données. Vous pouvez utiliser la classe Java.Time. Dans l'exemple suivant, nous calculerons un total de plusieurs mois avant la date actuelle et la date future.
LocalDate Java8Release = localDate.of (2014, Montry.March, 14); Pério-Péiné ));
On peut voir que ce mois-ci est en janvier, et la date de sortie du Java 8 est mars, il est donc à 2 mois d'intervalle.
Dans Java 8, vous pouvez utiliser la classe ZoneOffset pour représenter un certain fuseau horaire. Tant que vous obtenez ce décalage, vous pouvez utiliser LocalDateTime et ce décalage pour créer un OfficeTateTime.
LocalDaleTime DoteTime = LocalDateTime.of (2014, Mois.Janary, 14, 19, 30); .println ("Date and Heure avec le fuseau horaire Offset en Java:" + Date);On peut voir que la date actuelle est associée au fuseau horaire. Un autre point est que OfficeDateTime est principalement compris par la machine.
Si vous vous souvenez encore comment obtenir l'horodatage actuel avant Java 8, alors c'est simplement un petit plat. La classe instantanée a une méthode d'usine statique maintenant () pour renvoyer l'horodatage actuel, comme suit:
Instant TimeStamp = Instant.Now ();
On peut voir que l'horodatage actuel comprend la date et l'heure, ce qui est similaire à java.util.date. dans java.util.date, et date.toinstant () convertit la date en instant.
Avant le Java 8, le formatage de la date de temps est un travail technique. Grâce aux variables locales du fil, il l'a rendu utile dans un environnement multi-thread, mais il a été long pour Java de maintenir cet état. Cette fois, il a introduit un nouveau format de date de sécurité et d'heure. Il est également livré avec un format prédéterminé, qui contient le format de date couramment utilisé. Par exemple, dans cet exemple, nous utilisons le format de date ISO de base prédéfini, qui sera formaté du 14 février 2014 à 20140114.
String dayafterTommorwer = "20140116"; -16
Vous pouvez voir que la date de génération est adaptée à la valeur de la chaîne spécifiée, qui est légèrement différente dans le format de date.
Dans l'exemple ci-dessus, nous avons utilisé le format d'heure et de date construit pour résoudre la chaîne de date. Bien sûr, le format prédéterminé est vraiment bon, mais parfois vous devrez peut-être utiliser un format de date personnalisé. Le format de date dans cet exemple est "mmm dd yyyy". Vous pouvez transmettre la méthode statique d'OfPattern () à la méthode statique de DateTimeFormatter (), et il renverra une instance. Par exemple, M représente toujours le mois et M est toujours divisé. Le mode non valide lancera les anomalies de DatetimeParseException, mais s'il s'agit d'erreurs logiques, par exemple, elle doit être utilisée comme m quand m, donc il n'y a aucun moyen.
String goodfriday = "avr 18 2014"; ", GoodFriday, Holiday);} Catch (DateTimeParsException ex) {System.out.printf ("% s n'est pas analysé!% n ", GoodFriday); ex.printstacktr ace ();} sortie: chaîne analysée avec succès le 18 avril 2014 , La date est 2014-04-18On peut voir que la valeur de la date est en effet cohérente avec la chaîne de passage, mais le format est différent.
Dans les deux exemples précédents, bien que nous ayons utilisé la classe DateTimeFormatter, nous avons principalement analysé la chaîne de date. Dans cet exemple, ce que nous devons faire est exactement le contraire. Ici, nous avons une instance de la classe LocalDateTime, et nous voulons le convertir en une chaîne de date formatée. C'est le moyen le plus simple et le plus pratique de convertir la date en une chaîne en Java jusqu'à présent. L'exemple suivant renverra une chaîne formatée. Comme l'exemple précédent, nous devons toujours utiliser la chaîne de mode spécifiée pour créer une instance de la classe DateTimeFormatter, mais la méthode Parse de la classe LocalDate n'est pas, mais sa méthode format (). Cette méthode renverra une chaîne représentant la date en cours, et le mode correspondant est défini dans l'instance DateTimeFormatter qui est introduite.
LocalDaleTime ArrivalDate = localDateTime.Now (); System.out.printf ("% s ne peut pas formater!% n", ArrivalDate);On peut voir que l'heure actuelle est représentée par le mode "MMM DD Yyyy HH: MM A".
Après avoir lu ces exemples, je crois que vous avez une certaine compréhension du nouvel ensemble de temps et de date de Java 8. Maintenant, nous regardons certains des éléments clés de cette nouvelle API.
Chaque développeur Java devrait au moins comprendre ces cinq catégories de ces nouvelles API:
Le sac principal de cette bibliothèque est Java.Time, qui contient la classe, l'heure, l'instantané et la durée de la date représentative, l'heure, l'instantané et la durée. Il a deux sous-packages, l'un est java.time.foramt.
Le fuseau horaire fait référence aux zones qui partagent le même temps standard sur la planète. Il existe un identifiant unique dans chaque fuseau horaire, ainsi que le format d'une région / ville (Asie / Tokyo) et une heure de décalage à partir de Greenwich Time. Par exemple, le temps de décalage de Tokyo est de +09: 00.
La classe OfficedateTime contient en fait localDateTime et ZoneOffset. Il est utilisé pour indiquer une date complète (+06: 00 ou -08: 00) qui contient le décalage du temps de Greenwita (+/- heure: points, tels que +06: 00 ou -08: 00).
La classe DateTimeFormatter est utilisée pour le formatage et l'analyse de la date de Java. Contrairement à SimpledateFormat, il est inchangé et entièrement sûr. La classe DateTimeFormatter fournit de nombreux formats pré-définis et vous pouvez également personnaliser le format souhaité. Bien sûr, selon l'accord, il a également une méthode Parse () pour convertir la chaîne en une date. De même, la classe DateFormatter a également une méthode format () pour la date de formatage.
Disons que les deux formats de date de "mmm d yyyy" et "mmm dd yyyy" sont également légèrement différents. Dans le "2 janvier 2014", rapportera une erreur car elle s'attend à ce que deux personnages passe au cours du mois. Afin de résoudre ce problème, dans le cas du nombre de chiffres, vous devez compenser 0 devant.
Il s'agit de la nouvelle date d'heure de Java 8. Ces brefs exemples suffisent à comprendre certaines des nouvelles API de cette nouvelle API. Puisqu'il est expliqué sur la base de la tâche réelle, lorsqu'elle est rencontrée en Java, il n'est pas nécessaire de rechercher l'heure et la date. Nous avons appris à créer et à modifier la date du temps. Nous comprenons également les différences entre la date pure, la date du temps et le fuseau horaire du fuseau horaire. Il y a plusieurs jours le jour de l'anniversaire ou de l'assurance. Nous avons également appris à analyser et à formater la date dans la méthode de sécurité des threads dans Java 8 sans avoir à utiliser une variable locale de thread ou une bibliothèque de troisième partie. La nouvelle API est compétente pour toute tâche liée à la date de temps.
Si vous êtes également intéressé par les tutoriels Java 8, vous pouvez jeter un œil aux tutoriels suivants:
Lien original anglais