Datumsmanipulation in Java 8

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.

Aktuelle Uhrzeit

python


LocalDateTime ldt = LocalDateTime.now();

Jetzt können Sie es leicht bekommen.

Erstellen Sie eine Instanz, indem Sie das Datum numerisch angeben

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

Erstellen Sie eine Instanz, indem Sie das Datum in Zeichen angeben

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);

Englischer Mond Perth

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.

Berechnungsmethode

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

Datumsmanipulation in Java 8
Grundlegende Java-Datumsmanipulation
Aktuelles Datum in Java anzeigen
Datumsverarbeitung in Java (LocalDate: Initialisierung)
Partisierung in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
So implementieren Sie die Datumsberechnung in Java
Studieren Sie Java 8 (Datums-API im Paket java.time)
Ausgabedatum in Java im erweiterten ISO 8601-Format
So erhalten Sie das Datum mit Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
[Java] Datums- / Zeitoperationen
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Boyer-Moore-Implementierung in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Fehler in Java ausdrücken
Erstellen Sie JSON in Java
Was ist neu in Java 8?
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Parallele Ausführung in Java
Java: Datum hinzufügen [Hinweis]
[Java] Konvertierung des Datumstyps
Versuchen Sie es mit RocksDB mit Java
Lesen Sie Binärdateien in Java 1
Vermeiden Sie den Fehler, den Yuma in Java gemacht hat
Holen Sie sich EXIF-Informationen in Java
[Neta] Sleep Sort in Java
Bearbeiten von ini in Java: ini4j
Java-Geschichte in dieser Welt
Segfo Java in 6 Zeilen
Lassen Sie uns Spresense mit Java entwickeln (1)
Probieren Sie den Funktionstyp in Java aus! ①
Ich habe ein Roulette in Java gemacht.
Implementierung der zweistufigen Authentifizierung in Java
Schreiben Sie Flyway-Rückrufe in Java
Importieren Sie Excel-Daten mit Java 2