Frage

Warum Parsen '23: 00 PM‘mit SimpleDateFormat("hh:mm aa") Rückkehr 11 a.m

.?
War es hilfreich?

Lösung

Sie sollten eine Ausnahme bekommen, da „23.00 Uhr“ keine gültige Zeichenfolge, aber Javas Datum / Zeit-Anlage ist nachsichtig standardmäßig, wenn Datum Parsing Handhabung.

Die Logik ist, dass 23.00 Uhr 12 Stunden nach 23.00 Uhr ist, die 11.00 Uhr ist am folgenden Tag. Sie werden auch Dinge wie „31. April“ siehe „1. Mai“ analysiert werden (einen Tag nach dem 30. April).

Wenn Sie dieses Verhalten nicht wünschen, setzen Sie die milde Eigenschaft auf false auf Ihrem Simple mit Date # setLenient (boolean) , und Sie erhalten eine Ausnahme erhalten, wenn in einem ungültigen Datum / Zeit vorbei.

Andere Tipps

Sie wollen "HH: mm aa" als Format, wenn Sie 24-Stunden-Parsing wird

.
public static void main(String[] args) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
    final Date date = df.parse("23:00 PM");
    System.out.println("date = " + df.format(date));
}

Ausgänge

date = 23:00 PM

Haben Sie versucht, HH:mm aa?

HH ist für 24 Stunde, während hh 12 ist.

Hier sind die Formatierungsoptionen specifed in den javadoc

H     Hour in day (0-23)    
k   Hour in day (1-24)  
K   Hour in am/pm (0-11)    
h   Hour in am/pm (1-12) 

Beachten Sie, dass „h“ für Stunden 1-12 wäre. Wenn Sie 1-24 behandeln möchten, versuchen Sie „k“. für 0-23 versuchen "H". Aber ich würde nicht valide Ergebnisse erwarten, wenn Sie in der unmöglichen Daten setzen.

23.00 Uhr gedacht als 11.00 Uhr werden kann am nächsten Tag . Javascript und PHP arbeiten wie diese ziemlich viel, aber ich kann für Java nicht sprechen.

Ich würde vermuten, dass es funktioniert so etwas wie:

hours = hours % 12;

, um sicherzustellen, dass die Stunden im richtigen Bereich sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top