Le concept de conception de l'API de date et d'heure de Java est intéressant

Je n'ai pas utilisé l'API de date et d'heure (JSR 310 []) qui venait de Java SE 8 jusqu'à présent (puisque je n'étais pas particulièrement insatisfait de Joda-Time []), mais je l'ai recherchée l'autre jour. , J'ai trouvé le concept de design intéressant, je vais donc l'écrire.

Aperçu du package

Comme il existe de nombreux java.time.chrono [] qui contiennent des calendriers tels que le calendrier japonais, le nombre de classes semble être important.

paquet Aperçu interface classe Type d'énumération exception
java.time API principale 0 15 2 1
java.time.chrono Calendrier tel que le calendrier japonais[^chrono] 6 11 4 0
java.time.format Analyse / sortie 0 3 4 1
java.time.temporal Ajuster l'heure[^temporal] 7 6 2 1
java.time.zone Fuseau horaire 0 4 1 1
total 13 39 13 4

java.time [] À première vue, il y a beaucoup de classes ci-dessous, mais beaucoup d'entre elles correspondent aux mots que vous utilisez habituellement, vous pouvez donc les avaler facilement.

Immuable

Il n'existe qu'une seule classe modifiable, java.time.format.DateTimeFormatterBuilder []. Il y a des choses qui ne doivent pas nécessairement être immuables, comme java.time.temporal.TemporalAdjuster [], mais elles vous disent gentiment (aigri votre bouche?) Que vous devriez les rendre immuables.

Exigences de mise en œuvre: Cette interface ne limite pas l'implémentation à être variable, mais il est fortement recommandé qu'elle soit immuable.

Convention de dénomination des méthodes

En plus des standards «get» et «to», les mots suivants sont utilisés comme préfixes de méthode. Vous pouvez également trouver «avec», «plus» et «moins» dans Joda-Time [].

Évitez au maximum l'héritage

La plupart des classes n'utilisent pas l'héritage (héritent directement d'Object), à l'exception des classes d'exception. Ceci est en contraste avec Joda-Time Joda-Time.javadoc, qui utilisait beaucoup d'héritage. Même dans le cas de l'utilisation de l'héritage, la classe de base abstraite hérite directement de Object, et la sous-classe héritée est définitive pour éviter un héritage profond.

Éliminez complètement les classes existantes

Java.nio.Path [] introduit à partir de Java SE 7 peut être converti l'un à l'autre avec les java.io.File [] et toFile (), toPath () existants. Je vais. D'autre part, la conversion mutuelle avec l'ancienne API n'est implémentée que du côté de l'ancienne API.

J'ai le sentiment que ** vous (classe existante) êtes autorisé à marcher sur le sol de java.time **. Au début, il semble qu'aucune conversion mutuelle n'ait été préparée [^ 1], et j'ai même ressenti de la rancune contre l'ancienne API (ヽ ´ω`)

en conclusion

Il est également écrit en Java efficace, mais je sympathise avec lui car il a causé des bogues inattendus en ne le rendant pas immuable, et je pleurais parce qu'il a été hérité sans permission parce que je ne l'ai pas rendu définitif. Il y a de nombreux endroits à faire. Je vais l'utiliser activement à l'avenir.

[^ 1]: Astuces API de date et d'heure pour le japonais (ja) --notepad

Recommended Posts

Le concept de conception de l'API de date et d'heure de Java est intéressant
Qu'est-ce que la classe LocalDateTime? [Java débutant] -Date et classe d'heure-
Vérifiez la date et l'heure réelles lors de l'analyse avec SimpleDateFormat de Java
Examinons la signification de "stream" et "collect" dans l'API Stream de Java.
Explication des objets Ruby Time et Date
Date et l'heure
Mettre en forme la date et l'heure données par created_at
Méthode d'acquisition de la date et de l'heure à l'aide de l'API DateAndTime
La date et l'heure de java8 ont été mises à jour
[Java] Obtenez et affichez la date 10 jours plus tard à l'aide de l'API Time ajoutée à partir de Java 8.
Dans Time.strptime,% j (date totale de l'année) est
La comparaison d'énumération est ==, et equals est bonne [Java]
Comparaison de vitesse au moment de la génération au moment de la conversion de la date
Lorsque le mois de la date est acquis, le quart de janvier
Convivialité de la classe de date et d'heure dans chaque langue
Comment la valeur suivante de l'objet Time est-elle correcte?
Traitement de la date et de l'heure en Ruby. Utilisez correctement la date et l'heure.
Il est difficile d'utiliser la chaîne de caractères vide et la date de DBUnit, donc corrigez-la et utilisez-la.
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Lorsque vous utilisez le constructeur de la classe Date de Java, la date avance de 1900.
Réglez la date et l'heure à partir de la chaîne de caractères avec POI
Il est maintenant temps de commencer avec l'API Stream
[Java] Utilisez ResolverStyle.LENIENT pour bien gérer la date et l'heure
Pourquoi la largeur de l'élément plein écran est de 100% et la hauteur de 100vh
Android - L'ordre du traitement série et du traitement parallèle d'AsyncTask est-il garanti? ??
Obtenez la date et l'heure actuelles en spécifiant le fuseau horaire dans Thymeleaf
La relation entre la vérification stricte de la date Java et l'heure d'été
[API RESTful] Différences et conception des paramètres de chemin, paramètres de requête, corps de requête
'% 02d' Quel est le% de% 2?
Le manuel Biostar est trop intéressant
Ceci et cela de JDK
[MySQL] [java] Date et heure de réception
À propos de la classification et du concept de Immutable / Mutable / Const / Variable de Java et Kotlin.
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
Le contenu de la valeur de retour de executeBatch est différent entre 11g et 12c
Ceci et cela de la mise en œuvre du jugement en temps réel des dates en Java
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
Bibliothèque de tests unitaires Java - Déterminez si Artery-Date, Calendar, long est la date et l'heure actuelles (spécifiez la tolérance en minutes)