Manipulation de la date dans Java 8

Dans Java8, les classes LocalDate, LocalTime et LocalDateTime ont été ajoutées. Grâce à cela, l'opération gênante de date est devenue plus facile à la fois, alors je voudrais la présenter.

Heure actuelle

python


LocalDateTime ldt = LocalDateTime.now();

Vous pouvez désormais l'obtenir facilement.

Créer une instance en spécifiant la date numériquement

Vous pouvez créer une instance en spécifiant l'année, le mois, la date, l'heure, la minute, la seconde et la nanoseconde sous forme de valeurs numériques.

python


LocalDateTime ldt = LocalDateTime.of(2017, 12, 10, 23, 59, 59, 1);

Bien sûr, si vous spécifiez 13 ou plus pour un mois et une date qui n'existe pas dans ce mois, une erreur se produira.

python


LocalDateTime.of(2017, 13, 10, 23, 59, 59, 1); // ⇒ java.time.DateTimeException
LocalDateTime.of(2017, 12, 32, 23, 59, 59, 1); // ⇒ java.time.DateTimeException
LocalDateTime.of(2017, 12, 10, 24, 59, 59, 1); // ⇒ java.time.DateTimeException

Créer une instance en spécifiant la date en caractères

Je suis personnellement très satisfait de cette fonctionnalité. C'est beaucoup plus facile à analyser que jamais. Tout d'abord, utilisez la classe DateTimeFormatter pour créer un formateur en spécifiant le format, les paramètres régionaux, etc. de la date à analyser.

python


DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss", Locale.JAPANESE);

Utilisez le formateur que vous avez créé pour analyser la chaîne de date.

python


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss", Locale.JAPANESE);
LocalDateTime ldt = LocalDateTime.parse("2017/10/15 13:53:15", dtf);

Bien sûr, si vous spécifiez une date qui n'existe pas, une erreur se produira.

python


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss", Locale.JAPANESE);
LocalDateTime ldt = LocalDateTime.parse("2017/10/32 13:53:15", dtf);
// ⇒  java.time.DateTimeException: Invalid value for DayOfMonth

Ceci est contrôlé par un attribut appelé style de résolveur que Datetimeformatter possède. Le style du résolveur est un attribut qui détermine comment résoudre la valeur lorsque la chaîne de date et d'heure est analysée hors de la plage (32 jours ou plus tard en octobre). La valeur par défaut est SMART (intelligent), et il existe également LENIENT (généreux) et STRICT (strict). Voici le fonctionnement de chaque paramètre.

S'il est clairement au-delà de la plage autorisée, une erreur se produira. Par exemple, les 13e et 32e sont absolument impossibles, donc une erreur. Dans un mois avec moins de 31 jours, si vous spécifiez un jour inférieur à 31 qui n'est pas possible, ce sera le dernier jour du mois. Exemple)

python


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
        .withResolverStyle(ResolverStyle.SMART);
LocalDateTime ldt = LocalDateTime.parse("2017/11/31 23:16:10", dtf);
// ⇒ 2017/11/30T23:16:10

Même si vous spécifiez 31 comme ça, il sera arrondi à 30. À propos, une erreur se produira même si des éléments autres que la date dépassent la valeur limite. Erreur même si vous spécifiez 24h00 au lieu de 23h00. Erreur même si 60 minutes sont spécifiées.

S'il dépasse la plage autorisée, ce sera la date après le dernier jour initial du mois et le montant excédentaire est ajouté. Exemple)

python


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
        .withResolverStyle(ResolverStyle.LENIENT);
LocalDateTime ldt = LocalDateTime.parse("2017/11/33 23:16:10", dtf);
// ⇒ 2017/12/03T23:16:10
LocalDateTime ldt = LocalDateTime.parse("2017/13/33 24:61:61", dtf);
// ⇒ 2018-02-03T01:02:01

Tout ce qui n'est pas autorisé à cette date et heure entraînera une erreur. Strictement parlant, le format "aaaa" est une année pour le calendrier (ERA. Dans le cas du calendrier japonais, Showa ou Heisei), donc si ERA n'est pas spécifié, une erreur se produira. Le format "uuuu" représente une année sans rapport avec l'ERA. Exemple)

python


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd G HH:mm:ss")
        .withLocale(Locale.ENGLISH)
        .withResolverStyle(ResolverStyle.STRICT);
LocalDateTime ldt = LocalDateTime.parse("2017/11/30 AD 23:16:10", dtf);
// ⇒ 2017/11/30T23:16:10

DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss")
        .withResolverStyle(ResolverStyle.STRICT);
LocalDateTime ldt2 = LocalDateTime.parse("2017/11/30 23:16:10", dtf2);

Anglais Moon Perth

Tout ce que vous avez à faire est de changer les paramètres régionaux.

python


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MMM/dd HH:mm:ss", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse("2017/Oct/15 13:53:15", dtf);

Cependant, dans ce cas, si le mois est abaissé comme "oct", une erreur se produira. Que faire dans ce cas. Je ne suis pas sûr. Aussi, je le posterai après l'avoir vérifié.

Méthode de calcul

LocalDate facilite l'ajout et la soustraction de dates. C'est juste ce que vous voyez, donc je ne vais pas l'expliquer.

python


LocalDateTime ldt = LocalDateTime.now();
ldt.plusYears(1);
ldt.plusMonths(1);
ldt.plusDays(1);
ldt.plusHours(1);
ldt.plusMinutes(1);
ldt.plusSeconds(1);
ldt.minusYears(1);
ldt.minusMonths(1);
ldt.minusDays(1);
ldt.minusHours(1);
ldt.minusMinutes(1);
ldt.minusSeconds(1);

C'est comme ça? De plus, s'il y a une utilisation, nous l'ajouterons.

Recommended Posts

Manipulation de la date dans Java 8
Manipulation de base de la date Java
Afficher la date actuelle en Java
Traitement de la date en Java (LocalDate: Initialization)
Partition en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
Comment implémenter le calcul de la date en Java
Étude de Java 8 (API de date dans le package java.time)
Date de sortie en Java au format étendu ISO 8601
Comment obtenir la date avec Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
"Hello World" en Java
Interface appelable en Java
[Java] Opérations de date / heure
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Implémentation Boyer-Moore en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Créer JSON en Java
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
java: Ajouter une date [Note]
[Java] Conversion de type de date
Essayez d'utiliser RocksDB avec Java
Lire des fichiers binaires en Java 1
Évitez l'erreur que Yuma a donnée en Java
Obtenir des informations EXIF en Java
[Neta] Sleep Sort en Java
Modifier ini en Java: ini4j
L'histoire de Java dans ce monde
Segfo Java en 6 lignes
Essayez de développer Spresense avec Java (1)
Essayez le type fonctionnel en Java! ①
J'ai fait une roulette à Java.
Implémentation de l'authentification en deux étapes en Java
Ecrire des rappels de vol en Java
Importer des données Excel avec Java 2