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é.
Il y a une différence entre nouveau et utiliser la méthode fournie.
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");
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");
Essayez de convertir la chaîne à l'aide de SimpleDateFormat et DateTimeFormatter.
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);
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);
Essayez de formater SimpleDateFormat et DateTimeFormatter comme leur nom l'indique.
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);
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);
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