Zeichenfolge zu LocalDate


102

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:


78

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


Auch eine Bearbeitung für das Format "JJJJ-MMM-TT" eingereicht. JJJJ ist das Jahr der Ära, und (ungeheuerlicher) TT ist der Tag des Jahres.
Spencer Kormos

Die Antwort ist etwas falsch ... für joda time ist die zu verwendende Klasse DateTimeFormat, nicht DateTimeFormatter. Mit anderen Worten, rufen Sie DateTimeFormat.ofPattern ("JJJJ-MM-TT") auf. ParseLocalDate (yourInput);
Dan Haywood

188

java.time

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.


java.time.format.DateTimeParseException: Text '2005-nov-12' konnte bei Index 5 nicht analysiert werden
Atte Juvonen

3
Dies liegt daran, dass Ihr Standardgebietsschema erwartet, dass das 'N' von 'Nov' in Großbuchstaben geschrieben wird.
Hertzi

Weitere Informationen zu diesem Ansatz finden Sie in meiner Antwort auf eine ähnliche Frage.
Basil Bourque

14

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();

2
Beachten Sie, dass sich diese Antwort auf Joda bezieht, nicht auf Java SE.
DavidS

9

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.


1

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
}

1
Willkommen bei SO, wir freuen uns über Ihre Beiträge! Bitte bearbeiten Sie Ihre Antwort und geben Sie ein bisschen mehr Erklärungen, wie sie sich auf die Frage bezieht, woher Sie Ihre Lösung haben und warum sie funktioniert. Weitere Anleitungen finden Sie unter stackoverflow.com/help/how-to-answer
B - rian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.