LocalTime
moderna utilizzando LocalTime
classe.
LocalTime time = null;
DateTimeFormatter parseFormatter
= DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
try {
time = LocalTime.parse(s, parseFormatter);
} catch (DateTimeParseException dtpe) {
System.out.println(dtpe.getMessage());
}
Questo disattiva la stringa dalla domanda, 01:19 PM
, in un LocalTime
pari a 13:19
.
Abbiamo ancora bisogno di fornire il locale. Dal momento che i marcatori AM/PM sono difficilmente utilizzati nella pratica in altre lingue oltre all'inglese, ho considerato Locale.ENGLISH
una scommessa abbastanza sicura. Per favore sostituisci il tuo.
Già quando questa domanda è stata posta nel 2014, la sostituzione moderna per le vecchie classi Date
e SimpleDateFormat
era fuori, la moderna API di data e ora Java. Oggi considero obsolete le vecchie classi e raccomando caldamente di usare quelle moderne. Hanno generalmente dimostrato di essere notevolmente più programmabili e convenienti da utilizzare.
Solo per una cosa semplice, se non riusciamo a fornire un locale su un sistema con una locale predefinita che non riconosce AM e PM, il formattatore moderno ci darà un'eccezione con il messaggio Text '01:19 PM' could not be parsed at index 6
. L'indice 6 è dove si dice PM
, quindi siamo già in viaggio. Sì, lo so che lo è un modo per ottenere l'indice dall'eccezione generata dalla classe obsoleta, ma la maggior parte dei programmatori non è mai stata consapevole e quindi non l'ha usata.
Ancora più importante, la nuova API offre una classe LocalTime
che ci offre ciò che vogliamo e di cui abbiamo bisogno qui: solo l'ora del giorno senza la data. Questo ci consente di modellare i nostri dati in modo molto più preciso. Ci sono un certo numero di domande su Stack Overflow causate dalla confusione a sua volta causate dal fatto che uno Date
include necessariamente sia la data che l'ora quando a volte si desidera solo l'una o l'altra.
fonte
2017-07-24 18:43:11
Quale versione di Java stai usando? Il tuo codice funziona in Java 8. –
Nessuna eccezione con jdk 7 qui !!! –
Solo per confermare l'interrogante: ottengo anche l'eccezione usando Java 1.7.0_55. – icza