¿Cómo puedo convertir una cadena en a LocalDate
?
He visto ejemplos como:
LocalDate dt = new LocalDate("2005-11-12");
Pero mis cuerdas son como:
2005-nov-12
¿Cómo puedo convertir una cadena en a LocalDate
?
He visto ejemplos como:
LocalDate dt = new LocalDate("2005-11-12");
Pero mis cuerdas son como:
2005-nov-12
Respuestas:
Mientras usa Joda Time, debe usar DateTimeFormatter
:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
Si usa Java 8 o posterior, consulte la respuesta de hertzi
Desde Java 1.8, puede lograr esto sin una biblioteca adicional utilizando las clases java.time . Ver 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);
Sin embargo, la sintaxis es casi la misma.
Puede que tenga que pasar de DateTime a LocalDate.
Usando Joda Time:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
El formato de fecha y hora lo realiza org.joda.time.format.DateTimeFormatter class
. Tres clases proporcionan métodos de fábrica para crear formateadores , y esta es una. Los otros son ISODateTimeFormat
y DateTimeFormatterBuilder
.
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate class
es una clase de fecha y hora inmutable que representa una fecha sin zona horaria . LocalDate
es seguro para subprocesos e inmutable , siempre que la cronología también lo sea. Todas las clases de cronología estándar suministradas son seguras para subprocesos e inmutables.
DateTimeFormatter
tiene formatos incorporados que se pueden usar directamente para analizar una secuencia de caracteres. Se distingue entre mayúsculas y minúsculas, noviembre funcionará, pero nov y NOV no funcionarán:
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
proporciona una forma personalizada de crear un formateador. No distingue entre mayúsculas y minúsculas, nov, nov y NOV se tratarán de la misma manera.
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
}