In Java8 wurden die Klassen LocalDate, LocalTime und LocalDateTime hinzugefügt. Dank dessen ist die mühsame Datumsoperation sofort einfacher geworden, daher möchte ich sie vorstellen.
python
LocalDateTime ldt = LocalDateTime.now();
Jetzt können Sie es leicht bekommen.
Sie können eine Instanz erstellen, indem Sie Jahr, Monat, Datum, Stunde, Minute, Sekunde und Nanosekunde als numerische Werte angeben.
python
LocalDateTime ldt = LocalDateTime.of(2017, 12, 10, 23, 59, 59, 1);
Wenn Sie 13 oder mehr für einen Monat und einen Tag angeben, der in diesem Monat nicht vorhanden ist, tritt natürlich ein Fehler auf.
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
Ich persönlich bin mit dieser Funktion am meisten zufrieden. Es ist viel einfacher zu analysieren als je zuvor. Verwenden Sie zunächst die DateTimeFormatter-Klasse, um einen Formatierer zu erstellen, indem Sie das Format, das Gebietsschema usw. des Datums angeben, das Sie analysieren möchten.
python
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss", Locale.JAPANESE);
Verwenden Sie den von Ihnen erstellten Formatierer, um die Datumszeichenfolge zu analysieren.
python
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss", Locale.JAPANESE);
LocalDateTime ldt = LocalDateTime.parse("2017/10/15 13:53:15", dtf);
Wenn Sie ein Datum angeben, das nicht vorhanden ist, tritt natürlich ein Fehler auf.
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
Dies wird durch ein Attribut gesteuert, das als Resolver-Stil von Datetimeformatter bezeichnet wird. Der Resolver-Stil ist ein Attribut, das bestimmt, wie der Wert aufgelöst wird, wenn die Datums- und Zeitzeichenfolge außerhalb des Bereichs analysiert wird (32 Tage oder später im Oktober). Der Standardwert ist SMART, und es gibt auch LENIENT und STRICT. Das Folgende ist die Operation für jede Einstellung.
Wenn es deutlich außerhalb des zulässigen Bereichs liegt, tritt ein Fehler auf. Zum Beispiel sind 13. und 32. absolut unmöglich, also ein Fehler. Wenn Sie in einem Monat mit weniger als 31 Tagen einen Tag unter 31 angeben, der nicht möglich ist, ist dies der letzte Tag des Monats. Beispiel)
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
Selbst wenn Sie 31 wie folgt angeben, wird es auf 30 gerundet. Übrigens tritt auch dann ein Fehler auf, wenn andere Elemente als das Datum den Grenzwert überschreiten. Fehler, auch wenn Sie 24:00 statt 23:00 angeben. Fehler, auch wenn 60 Minuten angegeben sind.
Wenn der zulässige Bereich überschritten wird, ist dies das Datum nach dem ursprünglichen letzten Tag des Monats, und der überschüssige Betrag wird hinzugefügt. Beispiel)
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
Alles, was an diesem Datum und zu dieser Uhrzeit nicht zulässig ist, führt zu einem Fehler. Genau genommen ist das Format "JJJJ" ein Jahr für den Kalender (ERA. Im Fall des japanischen Kalenders Showa oder Heisei). Wenn also keine ERA angegeben ist, tritt ein Fehler auf. Das Format "uuuu" repräsentiert ein Jahr ohne Bezug zur ERA. Beispiel)
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);
Sie müssen lediglich das Gebietsschema ändern.
python
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MMM/dd HH:mm:ss", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse("2017/Oct/15 13:53:15", dtf);
In diesem Fall tritt jedoch ein Fehler auf, wenn der Monat wie "Okt" verringert wird. Was ist in diesem Fall zu tun? Ich bin mir nicht sicher. Außerdem werde ich es veröffentlichen, nachdem ich es überprüft habe.
Mit LocalDate können Sie ganz einfach Daten hinzufügen und entfernen. Es ist genau das, was du siehst, also werde ich es nicht erklären.
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);
Ist es so Wenn es eine Verwendung gibt, werden wir sie hinzufügen.
Recommended Posts