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 ISODateTimeFormat
und DateTimeFormatterBuilder
.
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate class
ist eine unveränderliche datetime-Klasse, die ein Datum ohne Zeitzone darstellt . LocalDate
ist 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
}
DateTimeFormatterBuilder
bietet 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
}