Wie kann ich einen String in einen konvertieren LocalDate?
Ich habe Beispiele gesehen wie:
LocalDate dt = new LocalDate("2005-11-12");
Aber meine Saiten sind wie:
2005-nov-12
Wie kann ich einen String in einen konvertieren LocalDate?
Ich habe Beispiele gesehen wie:
LocalDate dt = new LocalDate("2005-11-12");
Aber meine Saiten sind wie:
2005-nov-12
Antworten:
Wenn Sie Joda Time verwenden, sollten Sie Folgendes verwenden DateTimeFormatter:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
Wenn Sie Java 8 oder höher verwenden, lesen Sie die Antwort von hertzi
Seit Java 1.8 können Sie dies ohne zusätzliche Bibliothek mithilfe der Klassen java.time erreichen . Siehe 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);
Die Syntax ist jedoch fast dieselbe.
Möglicherweise müssen Sie von DateTime zu LocalDate wechseln.
Verwenden der Joda-Zeit:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
Die Datetime-Formatierung wird von der durchgeführt org.joda.time.format.DateTimeFormatter class. Drei Klassen bieten Factory-Methoden zum Erstellen von Formatierern , und dies ist eine. Die anderen sind ISODateTimeFormatund DateTimeFormatterBuilder.
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate classist eine unveränderliche datetime-Klasse, die ein Datum ohne Zeitzone darstellt . LocalDateist threadsicher und unveränderlich , vorausgesetzt, die Chronologie ist auch. Alle mitgelieferten Standard-Chronologieklassen sind threadsicher und unveränderlich.
DateTimeFormatter verfügt über integrierte Formate, mit denen eine Zeichenfolge direkt analysiert werden kann. Es ist case sensitive, Nov wird funktionieren, aber nov und NOV werden nicht funktionieren:
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
}
DateTimeFormatterBuilderbietet eine benutzerdefinierte Möglichkeit zum Erstellen eines Formatierers. Es wird zwischen Groß- und Kleinschreibung unterschieden, Nov, Nov und NOV werden gleich behandelt.
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
}