Ich versuche, eine Datumszeit-Zeichenfolge mit Java 8 DateTime API zu analysieren.
Die zu analysierende Zeichenfolge enthält Datum, Monat, Jahr und AM / PM-Markierung wie 17/02/2015 PM
.
Ich verwende das folgende Muster: dd/MM/yyyy aa
und ich erwarte, dass der analysierte LocalDateTime Zeitteil auf 12:00:00
oder 00:00:00
gesetzt wird, abhängig vom AM / PM Marker.
Unter Verwendung der früheren java.text.SimpleDateFormat
API funktioniert das Parsen wie erwartet unter Verwendung dieses Musters.
Aber wenn ich Java 8 DateTime API verwende und den folgenden Code ausführen:
%Vor%Ich habe die folgende Ausnahme:
%Vor% Wenn ich das Muster auf dd/MM/yyyy a
umschalte, dann habe ich die folgende Ausnahme:
Es ist auch seltsam, dass wenn ich die umgekehrte Operation, Format, es funktioniert gut:
%Vor% gibt jeweils 17/02/2015 AM
und 17/02/2015 PM
aus.
Das Javadoc für java.time.DateTimeFormatter
sagt (§Resolving, Schritt # 6):
- Eine lokale Zeit wird gebildet, wenn mindestens eine Stunde zur Verfügung steht. Dies beinhaltet das Bereitstellen von Standardwerten für Minute, Sekunde und Bruchteil der Sekunde.
Was ich verstehe, ist, dass die Feld-Stunde des Tages obligatorisch ist, um eine LocalDateTime zu parsen ... Gibt es keine Möglichkeit, den Zeitteil nur mit dem AM / PM-Feld zu analysieren?
Sie können die Standardwerte für nicht verfügbare Felder über DateTimeFormatterBuilder.parseDefaulting
: