Heim > Java > javaLernprogramm > Warum kann mein SimpleDateFormat Daten nicht analysieren und wie kann ich das Problem mithilfe von Locale und DateTimeFormatter beheben?

Warum kann mein SimpleDateFormat Daten nicht analysieren und wie kann ich das Problem mithilfe von Locale und DateTimeFormatter beheben?

Susan Sarandon
Freigeben: 2024-12-29 11:21:14
Original
903 Leute haben es durchsucht

Why Does My SimpleDateFormat Fail to Parse Dates, and How Can I Fix It Using Locale and DateTimeFormatter?

Geben Sie immer ein Gebietsschema mit einem SimpleDateFormat und einem DateTimeFormatter für benutzerdefinierte Formate an

Problem:

Parsen eines Datums- Die Zeitzeichenfolge mit SimpleDateFormat schlägt auf einem bestimmten Gerät fehl, was zu einem „nicht analysierbaren Datum“ führt. Fehler.

Analyse:

SimpleDateFormat erfordert einen Locale-Parameter, um die Sprache und kulturellen Konventionen für die Datumsanalyse anzugeben. Wenn kein Gebietsschema angegeben ist, wird das Standardgebietsschema des Systems verwendet. Dies kann zu Parsing-Inkonsistenzen auf Geräten mit unterschiedlichen Locale-Einstellungen führen.

Lösung:

  1. Geben Sie das gewünschte Locale explizit an, wenn Sie eine SimpleDateFormat-Instanz erstellen.
  2. Verwenden Sie stattdessen die moderne DateTimeFormatter-API SimpleDateFormat.Es bietet gebietsschemaspezifisches Parsen und Formatieren mit verbesserter Leistung und Flexibilität.

Detaillierte Erklärung:

Die angegebene Datum-Uhrzeit-Zeichenfolge ( „24. Okt. 2016, 19:31 Uhr“) ist auf Englisch. Wenn das Standardgebietsschema des Systems jedoch nicht Englisch ist (z. B. im Fall eines französischen Telefons), kann die Standardinstanz von SimpleDateFormat es nicht analysieren.

Java 8 (DateTimeFormatter):

Verwenden Sie in Java 8 DateTimeFormatter mit einem expliziten Gebietsschema, um benutzerdefinierte Datums-/Uhrzeitzeichenfolgen zu analysieren. Vermeiden Sie die Verwendung der vordefinierten Formatierer, die keine Gebietsschemata akzeptieren. Zum Beispiel:

DateTimeFormatter dtf = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("d MMM uuuu h:m a")
        .toFormatter(Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(strDateTime, dtf);
Nach dem Login kopieren

Java 6/7 (ThreeTen-Backport):

Wenn Sie bei Java 6 oder Java 7 nicht weiterkommen, verwenden Sie ThreeTen-Backport zum Backportieren DateTimeFormatter-Funktionalität.

Zusätzlich Hinweise:

  1. Die Fehlermeldung „Unparseable date: „24 Oct 2016 7:31 pm“ (at offset 3)“ weist darauf hin, dass die Analyse aufgrund des zweiten Zeichens („c“) fehlgeschlagen ist. ) in „Okt“ (Zeichen an Offset 3). Dies ist wahrscheinlich auf länderspezifische Unterschiede in den Monatsnamen zurückzuführen.
  2. Es wird dringend empfohlen, für die gesamte Datums-/Uhrzeitverarbeitung auf die moderne DateTimeFormatter-API umzusteigen, da diese in Bezug auf Funktionalität, Leistung und Konsistenz überlegen ist im Vergleich zu SimpleDateFormat.

Das obige ist der detaillierte Inhalt vonWarum kann mein SimpleDateFormat Daten nicht analysieren und wie kann ich das Problem mithilfe von Locale und DateTimeFormatter beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage