Como posso converter uma string em um LocalDate
?
Eu vi exemplos como:
LocalDate dt = new LocalDate("2005-11-12");
Mas minhas cordas são como:
2005-nov-12
Como posso converter uma string em um LocalDate
?
Eu vi exemplos como:
LocalDate dt = new LocalDate("2005-11-12");
Mas minhas cordas são como:
2005-nov-12
Respostas:
Ao usar o Joda Time, você deve usar DateTimeFormatter
:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
Se estiver usando Java 8 ou posterior, consulte a resposta de hertzi
Desde o Java 1.8, você pode conseguir isso sem uma biblioteca extra usando as classes java.time . Veja o 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);
A sintaxe é quase a mesma.
Você pode ter que ir de DateTime para LocalDate.
Usando o Joda Time:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
A formatação de data e hora é executada pelo org.joda.time.format.DateTimeFormatter class
. Três classes fornecem métodos de fábrica para criar formatadores , e esta é uma delas. Os outros são 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
é uma classe datetime imutável que representa uma data sem fuso horário . LocalDate
é thread-safe e imutável , desde que a cronologia também o seja. Todas as classes de cronologia padrão fornecidas são thread-safe e imutáveis.
DateTimeFormatter
possui formatos embutidos que podem ser usados diretamente para analisar uma sequência de caracteres. É sensível a maiúsculas e minúsculas, novembro funcionará, mas novembro e novembro não funcionarão:
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
fornece uma maneira personalizada de criar um formatador. Não diferencia maiúsculas de minúsculas, novembro, novembro e novembro serão tratados da mesma forma.
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
}