Parsing Datum und AM / PM mit Java 8 DateTime API

8

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:

%Vor%

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

  
  1. 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.
  2.   

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?

    
Benjamin 24.08.2015, 10:28
quelle

1 Antwort

11

Sie können die Standardwerte für nicht verfügbare Felder über DateTimeFormatterBuilder.parseDefaulting :

%Vor%     
Tagir Valeev 24.08.2015, 12:17
quelle

Tags und Links