Perché l'analisi '23: 00 PM 'con SimpleDateFormat("hh:mm aa")
restituisce 11 pm?Perché il parsing '23: 00 PM 'con SimpleDateFormat ("hh: mm aa") restituisce 11 am?
risposta
Si dovrebbe ricevere un'eccezione, poiché "23:00 PM" non è una stringa valida, ma la funzione data/ora di Java è lenient per impostazione predefinita, quando si gestisce l'analisi della data.
La logica è che 23:00 è 12 ore dopo le 23:00, che è 11:00 il giorno seguente. Vedrai anche cose come "31 aprile" analizzate come "1 maggio" (un giorno dopo il 30 aprile).
Se non si desidera questo comportamento, impostare la proprietà lenient su false su SimpleDateFormat utilizzando DateFormat#setLenient(boolean) e si otterrà un'eccezione quando si passa in date/orari non validi.
Ohh, ho già visto quella bandiera e non ho mai saputo che fosse tutto qui. : P (nè si preoccupa per questo) – OscarRyz
Adesso? :) –
Direi che si fa qualcosa di simile:
hours = hours % 12;
per garantire che le ore sono nell'intervallo corretto.
Si desidera "HH: mm aa" come formato, se si analizzerà l'intervallo 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
SimpleDateFormat df = new SimpleDateFormat ("HH: mm aa"); sta dando avvertimento sui pelucchi .. hai idea di come risolvere questo? – NovusMobile
Satyam, qual è l'avviso? –
Hai provato HH:mm aa
?
HH
è per 24 ore mentre hh
è per 12.
23:00 PM potrebbe essere pensato come 11:00 il giorno successivo. Javascript e PHP funzionano così ma non posso parlare per Java.
Questo è quello che sembra stia accadendo. Yeap! – OscarRyz
Qui ci sono le opzioni di formattazione specifed nel 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)
Si noti che "h" sarebbe per ore 1-12. Se vuoi gestire 1-24, prova "k". per 0-23 prova "H". Ma non mi aspetterei risultati validi se si inseriscono dati impossibili.
sì ... quella domanda non ha nemmeno senso. immondizia, spazzatura. probabilmente hai ragione che aggiunge 12 ore internamente per "pm". – mpen
@Peter: Beh, LO SO CHE !! In realtà ho scoperto qual era il problema dopo pochi minuti. Questa non è la domanda qui. (Hai mai eseguito il debug di codice di qualcun altro? Quindi ha senso.) – OscarRyz