[JAVA] Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??

Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??

Ich habe SimpleDateFormat und DateTimeFormatter in dem letzten Artikel, den ich geschrieben habe verwendet. Beide waren Datums- / Zeitformatierer, und ich konnte nicht herausfinden, was anders war, also habe ich nachgeschlagen.

Unterschied in der Instanziierung

Es gibt einen Unterschied zwischen neu und der Verwendung der bereitgestellten Methode.

Für SimpleDateFormat

Erstellen Sie eine neue Instanz von SimpleDateFormat. Nicht threadsicher. Daher ist es bei der Multithread-Verarbeitung erforderlich, jedes Mal unmittelbar vor der Verwendung eine Instanz zu erstellen.

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

Für DateTimeFormatter

DateTimeFormatter wird mit der ofPattern-Methode instanziiert. Gewindesicher. Im Gegensatz zu SimpleDateFormat muss nicht jedes Mal eine Instanz erstellt werden, wenn Sie sie während der Multithread-Verarbeitung verwenden.

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

analysieren

Versuchen Sie, den String mit SimpleDateFormat und DateTimeFormatter zu konvertieren.

Für SimpleDateFormat

Verarbeitung zum Konvertieren von Zeichenfolge in Datum. Übergeben Sie einfach den String-Typ als Argument an die Analysemethode. Die Ausnahmebehandlung von ParseException ist erforderlich, wird jedoch im folgenden Beispiel weggelassen.

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

Für DateTimeFormatter

String → Temporal Accessor-Konvertierungsprozess.

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

Was ist TemporalAccessor? Es wurde. Das Ausgabeergebnis lautet auch "ISO aufgelöst auf ~~". Es scheint die übergeordnete Schnittstelle von LocalDateTime zu sein. Es ist auch das übergeordnete Element von LocalDate, LocalTime und ZonedDateTime. Also kannst du das machen.

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

Beim Parsen mit DateTimeFommater scheint es viele Muster zu geben, in denen die Analysemethode von LocalDateTime verwendet wird. Es sieht aus wie unten. Ich möchte daran erinnern, dass dieser anscheinend häufiger verwendet wird. (Prozess zum Konvertieren von String in 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

Versuchen Sie, SimpleDateFormat und DateTimeFormatter so zu formatieren, wie es der Name vermuten lässt.

Für SimpleDateFormat

Verarbeitung zum Konvertieren von Datum in Zeichenfolge. Übergeben Sie den Typ java.util.Date als Argument an die Formatmethode.

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

Für DateTimeFormatter

Übergeben Sie TemporalAccessor als Argument an die Formatmethode.

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

Zusammenfassung

Ich schrieb es als schlampig, aber um zusammenzufassen, was ich fand,

SimpleDateFormat DateTimeFormatter
Schimmel java.util.Umstellung auf Datum TemporalAccessorKonvertierungnach(LocalDateTime),LocalDate,LocalTime,ZonedDateTimeetc.)
Instanzgenerierung new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS") DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS")
Thread sicher? ×
parse dtf.parse(str)
java.util.Es wird Datum.
dtf.parse(str)
TemporalAccessorwerden.
Analysemethoden wie LocalDateTime sind einfacher zu verwenden.
format sdf.format(date) dtf.format(TemporalAccessor)

Immerhin ist es schwierig, mit Java Datum / Uhrzeit umzugehen. Ich habe das Gefühl, dass PHP so schwierig geworden ist. (Vielleicht denke ich nur, weil ich mich nicht so sehr mit Datum / Uhrzeit beschäftigt habe ...)

Recommended Posts

Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??
[Rails] Was ist der Unterschied zwischen Redirect und Rendering?
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
Was ist der Unterschied zwischen Überspringen und Ausstehend? [RSpec]
Was ist der Unterschied zwischen einer Aktion und einer Instanzmethode?
Was ist der Unterschied zwischen einem Webserver und einem Anwendungsserver?
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
Über den Unterschied zwischen irb und pry
Was ist der Unterschied zwischen den Verantwortlichkeiten der Domänenschicht und der Anwendungsschicht in der Zwiebelarchitektur [DDD]?
[Java] Verstehe den Unterschied zwischen List und Set
[iOS] Verstehe den Unterschied zwischen Frame und Grenzen
[Rails / Active Record] Über den Unterschied zwischen create und create!
Verstehe den Unterschied zwischen abstrakten Klassen und Schnittstellen!
Unterschied zwischen vh und%
Unterschied zwischen i ++ und ++ i
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
[Swift] UITextField hat mir den Unterschied zwischen Null und "" beigebracht.
Unterschied zwischen Produkt und Variante
Unterschied zwischen redirect_to und render
Was ist die Zupfmethode?
Unterschied zwischen redirect_to und render
Unterschied zwischen CUI und GUI
Was ist die BufferedReader-Klasse?
Unterschied zwischen Mockito-Core und Mockito-All
Unterschied zwischen Klasse und Instanz
Unterschied zwischen Bundle und Bundle-Installation
Unterschied zwischen ArrayList und LinkedList
Unterschied zwischen render und redirect_to
Unterschied zwischen List und ArrayList
Unterschied zwischen .bashrc und .bash_profile
Wofür ist der Konstruktor?
Unterschied zwischen StringBuilder und StringBuffer
Unterschied zwischen render und redirect_to
Was sind Microservices und Microservices Frameworks?
Was ist die Initialisierungsmethode?
Gibt es Ende 2017 einen Leistungsunterschied zwischen Oracle JDK und OpenJDK?
Unterschied zwischen Java und JavaScript (wie man den Durchschnitt findet)
Was ist die LocalDateTime-Klasse? [Java-Anfänger] -Datum und Zeitklasse-
[Java] Überprüfen Sie den Unterschied zwischen orElse und orElseGet mit IntStream
Überschreiben wir den Unterschied zwischen == (Identität) und der Methode equals (Äquivalenz).
Der Unterschied zwischen der Programmierung mit Ruby-Klassen und der Programmierung ohne Ruby-Klassen
Ist die Kurzschlussauswertung wirklich schnell? Unterschied zwischen && und & in Java
Jetzt im dritten Jahr ist das Missverständnis, das ich bemerkt habe, der Unterschied zwischen der Gleichheitsmethode und ==
[Ruby] Unterschied zwischen get und post
Unterschied zwischen Instanzmethode und Klassenmethode
Finden Sie den Unterschied zwischen Listentypen
Unterschied zwischen Schnittstelle und abstrakter Klasse
[Java] Unterschied zwischen Hashmap und HashTable
[Terminal] Unterschied zwischen irb und pry