2012-01-05 13 views
72

Come posso convertire una stringa in LocalDate?String to LocalDate

Ho visto esempi come:

LocalDate dt = new LocalDate("2005-11-12"); 

Ma le mie corde sono come:

2005-nov-12 

risposta

62

Come si utilizza Joda tempo, si dovrebbe usare DateTimeFormatter:

final DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MMM-dd"); 
final LocalDate dt = dtf.parseLocalDate(yourinput); 

Se si utilizza Java 8 o versione successiva, quindi fare riferimento alla hertzi's answer

+1

+1 per l'utilizzo di DateTimeFormatter.parseLocalDate(), sebbene l'utente stia cercando un mese di 3 lettere. –

+1

Oops ... Risolto, grazie (mi insegnerà a leggere oltre) – fge

+0

Inoltre, ho inviato una modifica per il formato "aaaa-MMM-gg". YYYY è l'anno dell'era e (più egregiamente) DD è il giorno dell'anno. –

10

Potrebbe essere necessario passare da DateTime LocalDate.

DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd"); 
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12"); 
LocalDate localDate = dateTime.toLocalDate(); 
+1

grazie. questo è perfetto quando si usano versioni precedenti che mancano 'LocalDate.parse' e' DateTimeFormatter.parseLocalDate' – thedarklord47

6

Datetime formattazione viene eseguita dal org.joda.time.format.DateTimeFormatter class . Tre classi forniscono i metodi di produzione per creare i formattatori e questo è uno. Gli altri sono ISODateTimeFormat e DateTimeFormatterBuilder.

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd"); 
LocalDate lDate = new LocalDate().parse("2005-nov-12",format); 

final org.joda.time.LocalDate class è una classe DateTime immutabile rappresenta una data senza fuso orario. LocalDate è thread-safe e immutable, purché sia ​​la cronologia Chronology. Tutte le classi di cronologia standard fornite sono thread-safe e immutabili.

132

Da Java 1.8, è possibile ottenere questo senza una libreria in più:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd"); 
formatter = formatter.withLocale(putAppropriateLocaleHere); // Locale specifies human language for translating, and cultural norms for lowercase/uppercase and abbreviations and such. Example: Locale.US or Locale.CANADA_FRENCH 
LocalDate date = LocalDate.parse("2005-nov-12", formatter); 

la sintassi è quasi lo stesso però.

+0

java.time.format.DateTimeParseException: non è stato possibile analizzare il testo "2005-nov-12" all'indice 5 –

+3

Ciò accade perché l'impostazione predefinita locale prevede che la "N" di "Nov" sia maiuscola. – hertzi

+0

Vedere [mia risposta] (http://stackoverflow.com/a/38904830/642706) a una domanda simile per ulteriori discussioni su questo approccio. –