135 votes

Chaîne à LocalDate

Comment puis-je convertir une chaîne en LocalDate ?

J'ai vu des exemples comme :

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

Mais mes chaînes sont comme :

 2005-nov-12

239voto

hertzi Points 2309

java.time

Depuis Java 1.8, vous pouvez y parvenir sans bibliothèque supplémentaire en utilisant les classes java.time. Voir Tutoriel .

 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 syntaxe est pourtant à peu près la même.

96voto

fge Points 40850

Comme vous utilisez Joda Time, vous devez utiliser DateTimeFormatter :

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

Si vous utilisez Java 8 ou une version ultérieure, reportez-vous à la réponse de hertzi

14voto

Spencer Kormos Points 3082

Vous devrez peut-être passer de DateTime à LocalDate.

Utilisation de Joda Time :

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

5voto

DateTimeFormatter a des formats intégrés qui peuvent être directement utilisés pour analyser une séquence de caractères. C'est sensible à la casse, Nov fonctionnera cependant nov et NOV ne fonctionnera pas :

 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 fournit un moyen personnalisé de créer un formateur. Il est insensible à la casse, Nov , nov et NOV seront traités de la même manière.

 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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X