Perché il parsing '23: 12:00' con SimpleDateFormat ( ‘hh: mm aa’) restituiscono 11:00?

StackOverflow https://stackoverflow.com/questions/1154903

  •  18-09-2019
  •  | 
  •  

Domanda

Perché il parsing '23: 12:00' con ritorno SimpleDateFormat("hh:mm aa") 11 a.m

.?
È stato utile?

Soluzione

Si dovrebbe essere sempre un'eccezione, dal momento che "23:00 PM" non è una stringa valida, ma struttura data / ora di Java è indulgente per impostazione predefinita, durante la manipolazione della data di analisi.

La logica è che le ore 23:00 è di 12 ore dopo 11:00, che è 11:00 del giorno successivo. Vedrai anche cose come (un giorno dopo l'aprile 30) "31 aprile" essere analizzato come "1 maggio".

Se non si desidera questo comportamento, impostare la proprietà indulgente su false sul tuo SimpleDateFormat utilizzando DateFormat # setLenient (booleano) , e si otterrà un'eccezione quando passa in data non valida / orari.

Altri suggerimenti

Si vuole "HH: mm aa" come formato, se si prevede di parsing di tempo di 24 ore

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

uscite

date = 23:00 PM

Hai provato HH:mm aa?

HH è per 24 ore, mentre hh è per il 12.

Qui ci sono le opzioni di formattazione specifed nelle href="http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html"

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) 

Si noti che "h" sarebbe per ore 1-12. Se si desidera gestire 1-24, prova a "k". per 0-23 provare "H". Ma non mi aspetto risultati validi se si sta mettendo nei dati impossibile.

23:00 PM potrebbe essere pensato come 11:00 il giorno successivo . Javascript e PHP funzionano come questo più o meno, ma non posso parlare per Java.

Direi che si fa qualcosa di simile:

hours = hours % 12;

per garantire che le ore sono nell'intervallo corretto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top