2014-12-19 15 views
21

DateTimeFormmater non sembra gestire giorno cifra singola del mese:DateTimeFormatter Supporto per il giorno cifra singola di Mese e Mese dell'anno

String format = "MM/dd/yyyy"; 
String date = "5/3/1969"; 
System.out.println(new SimpleDateFormat(format).parse(date)); 
System.out.println(LocalDate.parse(date, DateTimeFormatter.ofPattern(format))); 

In questo esempio, SimpleDateFormat analizza correttamente la data, ma DateTimeFormatter genera eccezione. Se dovessi utilizzare date a riempimento zero, ad es. "05/03/1969", entrambi funzionano. Tuttavia, se il giorno del mese o il mese dell'anno sono cifre singole, lo DateTimeFormatter genera un'eccezione.

Qual è il formato DateTimeFormatter corretto per analizzare sia il mese sia il mese dell'anno a una e due cifre?

+0

Hai risolto questo problema? Sto anche esaminando una soluzione java8 per analizzare 1 o 2 cifre mese o 2 o 4 cifre anno. – user607455

risposta

35

Da the documentation:

Numero: Se il conteggio di lettere è uno, allora il valore viene emesso utilizzando il numero minimo di cifre e senza imbottitura.

Quindi lo specificatore di formato desiderato è M/d/yyyy, utilizzando moduli a lettera singola. Naturalmente, analizzerà ancora la data String s come "12/30/1969" correttamente come per questi valori giorno/mese, due cifre sono il "numero minimo di cifre".

La differenza importante è che MM e dd richiedono zero padding, non che M e d non può gestire valori superiori a 9 (che sarebbe un po ... inusuale).

Problemi correlati