Java 8 LocalDateTime-Typkonvertierung (String, java.util.Date)

Java 8 LocalDateTime-Typkonvertierung (String, java.util.Date)

Einführung

Datums- und Kalenderklassen wurden für Java-Datumstypen verwendet, es wird jedoch empfohlen, ab Java 8 LocalDateTime- / ZonedDateTime-Klassen usw. zu verwenden.

Dieses Mal hatte ich die Möglichkeit, die LocalDateTime-Klasse zu verwenden, also habe ich sie studiert. Es stellte sich heraus, dass es keine Methode gibt, die in einem Schuss konvertiert werden kann, und es ist nicht möglich, den Typ einfach zu konvertieren.

Dieses Mal habe ich String⇔LocalDateTime und java.util.Date⇔LocalDateTime auf meine eigene Weise organisiert.

String → LocalDateTime

Bei Verwendung der SimpleDateFormat-Klasse

Konvertieren Sie im Ablauf von String → SimpleDateFormat → Date → LocalDateTime.

    public static LocalDateTime toLocalDateTime(String date, String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date formatDate = sdf.parse(date);
        return LocalDateTime.ofInstant(formatDate.toInstant(), ZoneId.systemDefault());
    }

Anwendungsbeispiel

    public static void main(String args[]) {
        //Ausführungsergebnis: 2018-05-07T00:00
        System.out.println(toLocalDateTime("2018/05/07", "yyyy/MM/dd"));
    }

Bei Verwendung der DateTimeFormatter-Klasse

Im Gegensatz zu SimpleDateFormat muss die DateTimeFormatter-Klasse nicht neu sein. Zum Zeitpunkt der Generierung muss das Datumsmuster mit der ofPattern-Methode ermittelt werden.

Konvertieren Sie im Ablauf von String → DateTimeFormatter → LocalDateTime. Kann kürzer sein als mit SimpleDateFormat.

    public static LocalDateTime toLocalDateTime(String date, String format) {

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(date, dtf);
    }

Anwendungsbeispiel

    public static void main(String args[]) {
        //Ausführungsergebnis: 2018-05-07T10:00
        System.out.println(toLocalDateTime("2018/05/07 10:00:00","yyyy/MM/dd HH:mm:ss"));
    }

Da es sich jedoch um eine LocalDateTime mit Datum und Uhrzeit handelt, tritt ein Fehler auf, wenn die Uhrzeit nicht angegeben wird.

    public static void main(String args[]) {
        //Ausführungsergebnis: DateTimeParseException
        System.out.println(toLocalDateTime("2018/05/07","yyyy/MM/dd"));
    }

Wenn Sie also nur das Datum benötigen, geben Sie LocalDate oder zurück

    public static LocalDate toLocalDate(String date, String format) {

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
        return LocalDate.parse(date, dtf);

    }

Fügen Sie nach der Konvertierung in LocalDate 0 Uhr hinzu, um LocalDateTime zu erstellen.

    public static LocalDateTime toLocalDateTime(String date, String format) {

        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return LocalDate.parse(date, dateTimeFormatter).atTime(LocalTime.MIN);

    }

LocalDateTime → String ~~ Dies kann mit der Analysemethode in einem Schuss konvertiert werden. ~~ Es tut mir leid, es ist eine Lüge. Es kann mit der Formatmethode + DateTimeFormatter konvertiert werden.

    public static String toStr(LocalDateTime localDateTime, String format) {

        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return localDateTime.format(dateTimeFormatter);

    }

Anwendungsbeispiel

    public static void main(String args[]) {
        //Ausführungsergebnis: 2018/05/07
        System.out.println(toStr(LocalDateTime.now(), "yyyy/MM/dd"));
    }

LocalDateTime → java.util.Date Konvertieren Sie im Fluss von LocalDateTime → ZonedDateTime → Instant → java.util.Date.

    public static Date toDate(LocalDateTime localDateTime) {
        ZoneId zone = ZoneId.systemDefault();
        ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zone);
        Instant instant = zonedDateTime.toInstant();
        return Date.from(instant);
    }

Anwendungsbeispiel

    public static void main(String args[]) {
        //Ausführungsergebnis: Mo 07. Mai 19:59:32 JST 2018
        System.out.println(toDate(LocalDateTime.now()));
    }

java.util.Date → LocalDateTime

Konvertieren Sie im Ablauf von Datum → Sofort → Lokales Datum Uhrzeit.

    public static LocalDateTime toLocalDateTime(Date date) {
        Instant instant = date.toInstant();
        return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    }

Anwendungsbeispiel

    public static void main(String args[]) {
        // 2018-05-07T19:59:32.139
        System.out.println(toLocalDateTime(new Date()));
    }

Schließlich

LocalDateTime ist schwer zu handhaben. (Kleines Gefühl) Es ist möglicherweise besser, LocalDate und LocalTime ordnungsgemäß zu verwenden. Die Variablen werden aus Gründen der Klarheit (für mich) zeilenweise deklariert, aber natürlich ist es besser, alles in der einen Zeile zu tun, die Sie mir in den Kommentaren gesagt haben.

public static void main(String args[]) {
    // String→LocalDateTime
    System.out.println(LocalDate.parse("2018/05/07", 
                           DateTimeFormatter.ofPattern("uuuu/MM/dd"))
                       .atTime(LocalTime.MIN));
}

Frage

Ich habe den Unterschied zwischen SimpleDateFormat und DateTimeFormatter nicht vollständig verstanden, daher werde ich ihn später untersuchen.

Recommended Posts

Java 8 LocalDateTime-Typkonvertierung (String, java.util.Date)
Java-Typkonvertierung
Konvertierung des Java-Datumsdatentyps (Datum, Kalender, Zeichenfolge)
Typkonvertierung vom Java Big Decimal-Typ zum String-Typ
Uri → String, String → Uri-Typkonvertierung
[Java] Konvertierung des Datumstyps
Java-Typkonvertierung (String, int, Datum, Kalender usw.)
[Java] Konvertierung von Listentyp / Array-Typ
Java Primer Series (Typkonvertierung)
[Java] Korrekter Vergleich des String-Typs
Java-Zeichenfolge
Konvertierung in voller Breite → halbe Breite mit Java-Zeichenfolge (Kana in voller Breite → Kana in halber Breite)
In Bezug auf den Vergleich der Zeichenfolgentypäquivalenz in Java
[Leicht verständliche Erklärung! ] Konvertierung des Referenztyptyps in Java
[Java ~ Informationen zur Variablendefinition und Typkonvertierung ~] Studiennotiz
[Java] Spickzettel für Datentyp / Zeichenkettenklasse
Java-Studie Nr. 3 (Typkonvertierung und Befehlsausführung)
Hinweise zu Operatoren, die Java ~ String type ~ verwenden
[Java] Konvertiert Null vom Objekttyp in String-Typ
[Grundkenntnisse in Java] Informationen zur Typkonvertierung
[Java] Berechnungsmechanismus, Operatoren und Typkonvertierung
[Einführung in Java] Informationen zur Typkonvertierung (Besetzung, Promotion)
java.util.Date ⇔ java.time.LocalDateTime-Konvertierung
[Java] Auffüllen von Zeichenfolgen
[Java] Aufzählungstyp
Java-Doppeltyp
Java-String-Verarbeitung
Geteilter String (Java)
Konvertierung von URL zu String
[Java] Vergleich von Zeichenketten und && und ||
Mehrfacher Ersatz für Java-Zeichenfolgen
[Java, Kotlin] Typabweichung
Feld für den Java-Klassentyp
[Hinweis] Java: Zeichenfolgensuche
Typbestimmung in Java
Java # 1 studieren (typischer Typ)
Informationen zur Java String-Klasse
Konvertierungsprogramm in Leet-String
Endian-Konvertierung mit JAVA
[Java Bronze] Lernnotiz (Schnittstelle, statische Methode, Typkonvertierung usw.)
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren