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.
python
LocalDateTime ldt = LocalDateTime.now();
Vous pouvez désormais l'obtenir facilement.
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
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);
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é.
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