Wie formatiere ich LocalDate als Zeichenfolge?

154

Ich habe eine LocalDate-Variable namens Datum. Wenn ich sie drucke, wird 1988-05-05 angezeigt. Ich muss diese konvertieren, um sie als 05. Mai 1988 zu drucken. Wie geht das?

Jasko
quelle
3
Schauen Sie sich die DateTimeFormatter- Klasse an. Es gibt sogar Beispiele für die Konvertierung in und von Strings.
Azurefrog
2
Sie sollten Code anzeigen, was Sie bisher versucht haben und was nicht funktioniert, damit die Leute Ihnen helfen können.
Bvidal
Ich habe versucht, das zu tun, aber wegen dieser nervigen Sache "Es entspricht nicht unseren Qualitätsstandards", die ich schließlich aufgegeben habe, habe ich 15 Minuten gebraucht, um dies zu posten, weil ich "i" mit "I" korrigieren musste.
Jasko

Antworten:

303

SimpleDateFormat funktioniert nicht, wenn er mit LocalDate startet, das neu in Java 8 ist. Soweit ich sehen kann, müssen Sie DateTimeFormatter verwenden, http://docs.oracle.com/javase/8/docs/api/java/ time / format / DateTimeFormatter.html .

LocalDate localDate = LocalDate.now();//For reference
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLLL yyyy");
String formattedString = localDate.format(formatter);

Das sollte am 05. Mai 1988 gedruckt werden. Um den Zeitraum nach dem Tag und vor dem Monat zu erhalten, müssen Sie möglicherweise "dd'.LLLL yyyy" verwenden.

ProgrammersBlock
quelle
4
Vielen Dank, das hilft, aber es hat nicht mit 'LLLL' funktioniert, um den Namen des Monats anzuzeigen, aber mit 'MMMM' fand ich das seltsam, da selbst in der Dokumentation etwas anderes steht. Aber nochmals vielen Dank, dass Sie mir geholfen haben .
Jasko
2
Jetzt localDate.format (Formatierer); funktioniert überhaupt nicht
EngineSense
welche Version JDK Ihr Using @ProgrammersBlock
Lova Chittumuri
27

Könnte kurz sein als:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Zon
quelle
3
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

Die obige Antwort zeigt es für heute

karthik r
quelle
ofPatterns braucht Android O
Mahdi
0

Mit Hilfe von ProgrammersBlock-Posts habe ich mir das ausgedacht. Meine Bedürfnisse waren etwas anders. Ich musste eine Zeichenfolge nehmen und als LocalDate-Objekt zurückgeben. Ich erhielt einen Code, der den älteren Kalender und SimpleDateFormat verwendete. Ich wollte es etwas aktueller machen. Das habe ich mir ausgedacht.

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;


    void ExampleFormatDate() {

    LocalDate formattedDate = null;  //Declare LocalDate variable to receive the formatted date.
    DateTimeFormatter dateTimeFormatter;  //Declare date formatter
    String rawDate = "2000-01-01";  //Test string that holds a date to format and parse.

    dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE;

    //formattedDate.parse(String string) wraps the String.format(String string, DateTimeFormatter format) method.
    //First, the rawDate string is formatted according to DateTimeFormatter.  Second, that formatted string is parsed into
    //the LocalDate formattedDate object.
    formattedDate = formattedDate.parse(String.format(rawDate, dateTimeFormatter));

}

Hoffentlich hilft dies jemandem. Wenn jemand einen besseren Weg sieht, diese Aufgabe zu erledigen, fügen Sie bitte Ihre Eingabe hinzu.

pete
quelle
Ich sehe einen besseren Weg: nur LocalDate.parse(rawDate)! String.formatwird hier in einer völlig falschen Form verwendet und gibt nur die erste Zeichenfolge zurück; das DateTimeFormatterwird überhaupt nicht benutzt; parseist eine staticMethode von LocalDate; formattedDateist kein formatiertes Datum, nicht einmal ein String(wie in Frage angefordert)
user85421
0

Es gibt eine integrierte Möglichkeit, LocalDate für joda lib zu formatieren

import org.joda.time.LocalDate;

LocalDate localDate = LocalDate.now();
String dateFormat = "MM/dd/yyyy";
localDate.toString(dateFormat);

Falls Sie es noch nicht haben - fügen Sie es dem build.gradle hinzu:

implementation 'joda-time:joda-time:2.9.5'

Viel Spaß beim Codieren! :) :)

Inoy
quelle
1
Nicht nach dem Javadoc.
Edward
@ Edward, wenn nicht, beweisen Sie es bitte und geben Sie eine Lösung an, die Sie für besser halten.
Inoy
1
Sie möchten, dass ich beweise, dass LocalDate.toString (String-Muster) NICHT existiert? Bitte geben Sie einen Verweis auf diese Methode an, falls sie existiert - ich konnte sie in keinem Javadocs finden. Für eine Lösung hat diese Frage bereits das.
Edward
@ Edward, Sieht so aus, als ob es dir schwer fällt, es zu finden. Meine Antwort wurde aktualisiert.
Inoy
Joda Time ist nicht "eingebaut". OP scheint java.time.LocalDate zu verwenden, nicht joda.time
Edward
-11

Eine ziemlich gute Möglichkeit, dies zu tun, ist die Verwendung. SimpleDateFormatIch zeige Ihnen, wie:

SimpleDateFormat sdf = new SimpleDateFormat("d MMMM YYYY");
Date d = new Date();
sdf.format(d);

Ich sehe, dass Sie das Datum in einer Variablen haben:

sdf.format(variable_name);

Prost.

nom
quelle
3
OP möchte den Inhalt einer LocalDateInstanz in einem bestimmten Format drucken . Wie könnte SimpleDateFormatihm hier helfen?
Tom