2016-07-07 29 views
6

sto cercando di analizzare alcune date, ma il DateTimeParser sembra non essere d'accordo con me su ciò che è validoJava8 DateTimeFormatter am/pm

import java.time.ZonedDateTime 
import java.time.format.DateTimeFormatter 
import java.util.Locale 

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy hh:mma z", Locale.US)) 

Quando provo questo si dice

java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 17 
Così

qualcosa è sbagliato con le ore? Quando ho cadere uno dei 'h' si allontana (benche si deve solo 0-pad mie ore), ma poi non gli piace il pm-stuff

ZonedDateTime.parse("Wed Jul 16, 2016 4:38pm EDT", DateTimeFormatter.ofPattern("EEE MMM dd, yyyy h:mma z", Locale.US)) 
java.time.format.DateTimeParseException: Text 'Wed Jul 16, 2016 4:38pm EDT' could not be parsed at index 21 

non so quale sia il suo esatto il problema è Quando provo 'hh: mmaa' ​​come un pattern, dice che non gli piace due ae ora sono bloccato, dal momento che i messaggi di errore non sono utili.

risposta

9

a si aspetta o PM o AM in maiuscolo. Per ottenere un caso formattatore insensibile è necessario costruire manualmente:

DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
     .parseCaseInsensitive() 
     .appendPattern("EEE MMM dd, yyyy h:mma z") 
     .toFormatter(Locale.US); 

noti che si ottiene un nuovo errore, perché il 16 luglio non è un Mercoledì.

+0

wow .. Qualche idea sul perché il valore predefinito non supporta le lettere minuscole? Stavo convertendo il vecchio codice java.util.Date in java.time e SimpleDateFormat non ha avuto problemi con esso. –

Problemi correlati