Comment puis-je convertir une chaîne en un LocalDate
?
J'ai vu des exemples comme:
LocalDate dt = new LocalDate("2005-11-12");
Mais mes cordes sont comme:
2005-nov-12
Comment puis-je convertir une chaîne en un LocalDate
?
J'ai vu des exemples comme:
LocalDate dt = new LocalDate("2005-11-12");
Mais mes cordes sont comme:
2005-nov-12
Réponses:
Lorsque 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
Depuis Java 1.8, vous pouvez y parvenir sans bibliothèque supplémentaire en utilisant les classes java.time . Voir le didacticiel .
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 cependant presque la même.
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();
Le formatage Datetime est effectué par le org.joda.time.format.DateTimeFormatter class
. Trois classes fournissent des méthodes d'usine pour créer des formateurs , et celle-ci en est une. Les autres sont ISODateTimeFormat
et DateTimeFormatterBuilder
.
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate class
est une classe datetime immuable représentant une date sans fuseau horaire . LocalDate
est thread-safe et immuable , à condition que la chronologie le soit également. Toutes les classes de chronologie standard fournies sont thread-safe et immuables.
DateTimeFormatter
a des formats intégrés qui peuvent être directement utilisés pour analyser une séquence de caractères. Il est sensible à la casse, Nov fonctionnera, mais nov et NOV ne fonctionneront 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, les novembre, novembre et novembre 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
}