Come posso convertire una stringa in a LocalDate
?
Ho visto esempi come:
LocalDate dt = new LocalDate("2005-11-12");
Ma le mie corde sono come:
2005-nov-12
Come posso convertire una stringa in a LocalDate
?
Ho visto esempi come:
LocalDate dt = new LocalDate("2005-11-12");
Ma le mie corde sono come:
2005-nov-12
Risposte:
Mentre usi Joda Time, dovresti usare DateTimeFormatter
:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
Se utilizzi Java 8 o versioni successive, fai riferimento alla risposta di hertzi
A partire da Java 1.8, puoi ottenere ciò senza una libreria aggiuntiva utilizzando le classi java.time . Vedi Tutorial .
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 la stessa però.
Potrebbe essere necessario passare da DateTime a LocalDate.
Utilizzando Joda Time:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
La formattazione data / ora viene eseguita da org.joda.time.format.DateTimeFormatter class
. Tre classi forniscono metodi di fabbrica per creare 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 che rappresenta una data senza fuso orario . LocalDate
è thread-safe e immutabile , a condizione che lo sia anche la cronologia . Tutte le classi di cronologia standard fornite sono thread-safe e immutabili.
DateTimeFormatter
ha formati incorporati che possono essere utilizzati direttamente per analizzare una sequenza di caratteri. È sensibile al maiuscolo / minuscolo, Nov funzionerà tuttavia nov e NOV non funzionerà:
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
try {
LocalDate datetime = LocalDate.parse(oldDate, pattern);
System.out.println(datetime);
} catch (DateTimeParseException e) {
// DateTimeParseException - Text '2019-nov-12' could not be parsed at index 5
// Exception handling message/mechanism/logging as per company standard
}
DateTimeFormatterBuilder
fornisce un modo personalizzato per creare un formattatore. Non fa distinzione tra maiuscole e minuscole, Nov, nov e NOV saranno trattati allo stesso modo.
DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
.append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
LocalDate datetime = LocalDate.parse(oldDate, f);
System.out.println(datetime); // 2019-11-12
} catch (DateTimeParseException e) {
// Exception handling message/mechanism/logging as per company standard
}