[JAVA] Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??

Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??

J'ai utilisé SimpleDateFormat et DateTimeFormatter dans le dernier article que j'ai écrit. Les deux étaient des formateurs de date et d'heure, et je ne pouvais pas comprendre ce qui était différent, alors j'ai regardé.

Différence d'instanciation

Il y a une différence entre nouveau et utiliser la méthode fournie.

Pour SimpleDateFormat

Pour créer une instance de SimpleDateFormat, créez-en un nouveau. Pas de thread safe. Par conséquent, dans le cas d'un traitement multi-thread, il est nécessaire de créer une instance à chaque fois immédiatement avant de l'utiliser.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");

Pour DateTimeFormatter

DateTimeFormatter est instancié avec la méthode ofPattern. Fil sûr. Contrairement à SimpleDateFormat, il n'est pas nécessaire de créer une instance chaque fois que vous l'utilisez pendant le traitement multithread.

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS");

analyser

Essayez de convertir la chaîne à l'aide de SimpleDateFormat et DateTimeFormatter.

Pour SimpleDateFormat

Traitement pour convertir de la chaîne en date. Passez simplement le type String comme argument à la méthode d'analyse. La gestion des exceptions de ParseException est requise, mais omise dans l'exemple ci-dessous.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = sdf.parse("2018/05/14 12:34:56.123");
// Mon May 14 12:34:56 UTC 2018
System.out.println(date);

Pour DateTimeFormatter

Chaîne → Processus de conversion de l'accesseur temporel.

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS");
TemporalAccessor ta = dtf.parse("2018/05/14 12:34:56.123");
// {},ISO resolved to 2018-05-14T12:34:56.123
System.out.println(ta);

Qu'est-ce que TemporalAccessor? C'est devenu. Le résultat de sortie indique également "ISO résolu en ~~". Cela semble être l'interface parente de LocalDateTime. Il est également le parent de LocalDate, LocalTime et ZonedDateTime. Vous pouvez donc le faire.

TemporalAccessor tAccessor = LocalDateTime.of(2018, 5, 14, 12, 34, 56);

Lors de l'analyse avec DateTimeFommater, il semble qu'il existe de nombreux modèles dans lesquels la méthode d'analyse de LocalDateTime est utilisée. Cela ressemble à ci-dessous. Je veux me rappeler que celui-ci semble être utilisé plus fréquemment. (Processus de conversion de String en LocalDateTime.)

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS");
LocalDateTime date = LocalDateTime.parse("2018/05/14 12:34:56.123", dtf);
// 2018-05-14T12:34:56.123
System.out.println(date);

format

Essayez de formater SimpleDateFormat et DateTimeFormatter comme leur nom l'indique.

Pour SimpleDateFormat

Traitement pour convertir de la date en chaîne. Transmettez le type java.util.Date comme argument à la méthode format.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = sdf.parse("2018/05/14 12:34:56.123");
// Mon May 14 12:34:56 UTC 2018
System.out.println(date);
        
String str = sdf.format(date);
// 2018/05/14 12:34:56.123
System.out.println(str);

Pour DateTimeFormatter

Passez TemporalAccessor comme argument à la méthode de format.

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS");
LocalDateTime date = LocalDateTime.parse("2018/05/14 12:34:56.123", dtf);
// 2018-05-14T12:34:56.123
System.out.println(date);

String str = dtf.format(date);
// 2018/05/14 12:34:56.123
System.out.println(str);

Résumé

Je l'ai écrit comme bâclé, mais pour résumer ce que j'ai trouvé,

SimpleDateFormat DateTimeFormatter
Moule java.util.Conversion en date TemporalAccessorConversionen(LocalDateTime),LocalDate,LocalTime,ZonedDateTimeetc.)
Génération d'instance new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS") DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS")
Thread safe? ×
parse dtf.parse(str)
java.util.Cela devient Date.
dtf.parse(str)
TemporalAccessordevenir.
Les méthodes d'analyse telles que LocalDateTime sont plus faciles à utiliser.
format sdf.format(date) dtf.format(TemporalAccessor)

Après tout, il est difficile de gérer la date / heure Java. Je pense que PHP est devenu si difficile. (Peut-être que je le pense simplement parce que je n'ai pas tellement traité de date / heure ...)

Recommended Posts

Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??
[Rails] Quelle est la différence entre la redirection et le rendu?
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
Quelle est la différence entre ignorer et en attente? [RSpec]
Quelle est la différence entre une action et une méthode d'instance?
Quelle est la différence entre un serveur Web et un serveur d'applications?
[Java] Quelle est la différence entre form, entity et dto? [Haricot]
À propos de la différence entre irb et pry
Quelle est la différence entre les responsabilités de la couche domaine et de la couche application dans l’architecture onion [DDD]
[Java] Comprendre la différence entre List et Set
[iOS] Comprendre la différence entre le cadre et les limites
[Rails / Active Record] À propos de la différence entre créer et créer!
Comprenez la différence entre les classes abstraites et les interfaces!
Différence entre vh et%
Différence entre i ++ et ++ i
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
[Swift] UITextField m'a appris la différence entre nil et ""
Différence entre produit et variante
Différence entre redirect_to et render
Quelle est la méthode pluck?
Différence entre redirect_to et render
Différence entre CUI et GUI
Qu'est-ce que la classe BufferedReader?
Différence entre mockito-core et mockito-all
Différence entre classe et instance
Différence entre l'installation de bundle et de bundle
Différence entre ArrayList et LinkedList
Différence entre render et redirect_to
Différence entre List et ArrayList
Différence entre .bashrc et .bash_profile
A quoi sert le constructeur?
Différence entre StringBuilder et StringBuffer
Différence entre render et redirect_to
Qu'est-ce que les microservices et les frameworks de microservices
Quelle est la méthode d'initialisation?
Existe-t-il une différence de performances entre Oracle JDK et OpenJDK à la fin de 2017?
Différence entre Java et JavaScript (comment trouver la moyenne)
Qu'est-ce que la classe LocalDateTime? [Java débutant] -Date et classe d'heure-
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
Remplaçons la différence entre == (identité) et méthode equals (équivalence)
La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas
L'évaluation des courts-circuits est-elle vraiment rapide? Différence entre && et & en Java
Maintenant dans la troisième année, le malentendu que j'ai remarqué est la différence entre la méthode equals et ==
[Ruby] Différence entre obtenir et publier
Différence entre la méthode d'instance et la méthode de classe
Trouvez la différence entre les types de liste
Différence entre interface et classe abstraite
[Java] Différence entre Hashmap et HashTable
[Terminal] Différence entre irb et pry