Conversion de type Java 8 LocalDateTime (String, java.util.Date)

Conversion de type Java 8 LocalDateTime (String, java.util.Date)

introduction

Les classes Date et Calendar ont été utilisées pour les types de date Java, mais il est recommandé d'utiliser les classes LocalDateTime / ZonedDateTime, etc. à partir de Java 8.

Cette fois, j'ai eu l'occasion d'utiliser la classe LocalDateTime, donc je l'ai étudiée. Il s'est avéré qu'aucune méthode ne pouvait être convertie en une seule fois et qu'il n'était pas possible de convertir facilement le type.

Cette fois, j'ai organisé String⇔LocalDateTime et java.util.Date⇔LocalDateTime à ma manière.

String → LocalDateTime

Lors de l'utilisation de la classe SimpleDateFormat

Convertissez dans le flux de 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());
    }

Exemple d'utilisation

    public static void main(String args[]) {
        //Résultat d'exécution: 2018-05-07T00:00
        System.out.println(toLocalDateTime("2018/05/07", "yyyy/MM/dd"));
    }

Lors de l'utilisation de la classe DateTimeFormatter

Contrairement à SimpleDateFormat, la classe DateTimeFormatter n'a pas besoin d'être nouvelle. Il est nécessaire de déterminer le modèle de date avec la méthode ofPattern au moment de la génération.

Convertissez dans le flux de String → DateTimeFormatter → LocalDateTime. Peut être plus court que l'utilisation de SimpleDateFormat.

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

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

Exemple d'utilisation

    public static void main(String args[]) {
        //Résultat d'exécution: 2018-05-07T10:00
        System.out.println(toLocalDateTime("2018/05/07 10:00:00","yyyy/MM/dd HH:mm:ss"));
    }

Cependant, étant donné qu'il s'agit d'un LocalDateTime qui a une date et une heure, une erreur se produit si l'heure n'est pas spécifiée.

    public static void main(String args[]) {
        //Résultat de l'exécution: DateTimeParseException
        System.out.println(toLocalDateTime("2018/05/07","yyyy/MM/dd"));
    }

Donc, si vous n'avez besoin que de la date, essayez de renvoyer LocalDate, ou

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

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

    }

Après la conversion en LocalDate, ajoutez 0 heure pour le rendre LocalDateTime.

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

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

    }

LocalDateTime → String ~~ Ceci peut être converti en un seul coup en utilisant la méthode parse. ~~ Je suis désolé, c'est un mensonge. Il peut être converti avec la méthode de format + DateTimeFormatter.

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

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

    }

Exemple d'utilisation

    public static void main(String args[]) {
        //Résultat d'exécution: 2018/05/07
        System.out.println(toStr(LocalDateTime.now(), "yyyy/MM/dd"));
    }

LocalDateTime → java.util.Date Convertissez dans le flux de 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);
    }

Exemple d'utilisation

    public static void main(String args[]) {
        //Résultat de l'exécution: lun 07 mai 19:59:32 JST 2018
        System.out.println(toDate(LocalDateTime.now()));
    }

java.util.Date → LocalDateTime

Convertissez dans le flux de Date → Instant → Date locale Heure.

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

Exemple d'utilisation

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

finalement

LocalDateTime est difficile à gérer. (Petite sensation) Il peut être préférable d'utiliser correctement LocalDate et LocalTime. Les variables sont déclarées ligne par ligne par souci de clarté (pour moi), mais bien sûr, il est préférable de tout faire en une seule ligne comme indiqué dans les commentaires.

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

Question

Je n'ai pas entièrement saisi la différence entre SimpleDateFormat et DateTimeFormatter, je vais donc l'examiner plus tard.

Recommended Posts

Conversion de type Java 8 LocalDateTime (String, java.util.Date)
Conversion de type Java
Conversion de type de données de date Java (date, calendrier, chaîne)
Conversion de type du type java Big Decimal au type String
Conversion de type Uri → String, String → Uri
[Java] Conversion de type de date
Conversion de type Java (chaîne, entier, date, calendrier, etc.)
[Java] Conversion de type de liste / type de tableau
Java Primer Series (conversion de type)
[Java] Comparaison correcte du type String
Chaîne Java
Conversion pleine largeur → demi-largeur avec Java String (kana pleine largeur → kana demi-largeur)
Concernant la comparaison d'équivalence de type de chaîne en Java
[Explication facile à comprendre! ] Conversion de type de type de référence en Java
[Java ~ A propos de la définition de variable et de la conversion de type ~] Note d'étude
[Java] Aide-mémoire de classe de type de données / chaîne de caractères
Etude Java n ° 3 (conversion de type et exécution d'instruction)
Remarques sur les opérateurs utilisant Java ~ Type chaîne ~
[Java] Convertit null du type Object en type String
[Connaissance de base de Java] À propos de la conversion de type
[Java] Mécanisme de calcul, opérateurs et conversion de type
[Introduction à Java] À propos de la conversion de type (distribution, promotion)
java.util.Date ⇔ conversion java.time.LocalDateTime
[Java] Remplissage de la chaîne de caractères
[Java] Type d'énumération
Java double type
Traitement des chaînes Java
Chaîne divisée (Java)
Conversion d'URL en chaîne
[Java] Comparaison des chaînes de caractères et && et ||
Remplacement multiple de chaîne Java
[Java, Kotlin] Variance de type
Champ de type de classe Java
[Note] Java: recherche de chaînes de caractères
Détermination de type en Java
Étudier Java # 1 (type typique)
À propos de la classe Java String
Programme de conversion en chaîne Leet
Conversion Endian avec JAVA
[Java Bronze] Mémo d'apprentissage (interface, méthode statique, conversion de type, etc.)
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java