it-swarm.com.de

So formatieren Sie das LocalDate-Objekt in MM/TT/JJJJ und lassen das Format beibehalten

Ich lese Text und speichere die Datumsangaben als LocalDate-Variablen. 

Gibt es eine Möglichkeit für mich, die Formatierung von DateTimeFormatter beizubehalten, damit ich beim Aufruf der LocalDate-Variablen immer noch dieses Format habe.

BEARBEITEN: Ich möchte, dass das parsedDate im korrekten Format vom 25.09.2016 gespeichert wird, anstatt als Zeichenfolge gedruckt zu werden

Mein Code:

public static void main(String[] args) 
{
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date); // date: 2016-09-25
    System.out.println("Text format " + text); // Text format 25/09/2016
    System.out.println("parsedDate: " + parsedDate); // parsedDate: 2016-09-25

    // I want the LocalDate parsedDate to be stored as 25/09/2016
}
4
MOZAKATAK

BEARBEITEN: Wenn Sie Ihre Bearbeitung in Betracht ziehen, setzen Sie parsedDate wie Ihre formatierte Textzeichenfolge wie folgt:

parsedDate = text;

Ein LocalDate-Objekt kann immer nur im ISO8601-Format (JJJJ-MM-TT) gedruckt werden. Um das Objekt in einem anderen Format zu drucken, müssen Sie es formatieren und das LocalDate als String speichern, wie Sie es in Ihrem eigenen Beispiel gezeigt haben

DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
String text = date.format(formatters);
14
Rebecca Close

Kurze Antwort: Nein.

Lange Antwort: Ein LocalDate ist ein Objekt, das ein Jahr, einen Monat und einen Tag darstellt. Dies sind die drei Felder, die es enthalten wird. Es hat kein Format, da verschiedene Gebietsschemas unterschiedliche Formate haben und es schwieriger wird, die Operationen auszuführen, die an einem LocalDate-Vorgang ausgeführt werden sollen (z. B. Tage hinzufügen oder entfernen oder Zeiten hinzufügen).

Die String-Darstellung (erstellt von toString()) ist der internationale Standard für das Drucken von Datumsangaben. Wenn Sie ein anderes Format wünschen, sollten Sie ein DateTimeFormatter Ihrer Wahl verwenden.

3
Joe C

Formatieren Sie einfach das Datum, während Sie es ausdrucken:

public static void main(String[] args) {
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date);
    System.out.println("Text format " + text);
    System.out.println("parsedDate: " + parsedDate.format(formatters));
}
3
Wojciech Kazior

Dies kann möglich sein, wenn Sie LocalDate erweitern und die toString()-Methode überschreiben könnten, die LocalDate-Klasse jedoch unveränderlich ist und daher (secure oop) final ist. Das heißt, wenn Sie diese Klasse verwenden möchten, können Sie als einzige toString()-Methode die obige (aus LocalDate-Quellen kopierte) Methode verwenden:

@Override
public String toString() {
    int yearValue = year;
    int monthValue = month;
    int dayValue = day;
    int absYear = Math.abs(yearValue);
    StringBuilder buf = new StringBuilder(10);
    if (absYear < 1000) {
        if (yearValue < 0) {
            buf.append(yearValue - 10000).deleteCharAt(1);
        } else {
            buf.append(yearValue + 10000).deleteCharAt(0);
        }
    } else {
        if (yearValue > 9999) {
            buf.append('+');
        }
        buf.append(yearValue);
    }
    return buf.append(monthValue < 10 ? "-0" : "-")
        .append(monthValue)
        .append(dayValue < 10 ? "-0" : "-")
        .append(dayValue)
        .toString();
}

Wenn Siemüssendieses Verhalten außer Kraft setzen, können Sie LocalDate einrahmen und Ihre benutzerdefinierte toString-Methode verwenden. Dies kann jedoch mehr Probleme verursachen, als es löst.

0