convert Date to LocalDate

guguli

Bekanntes Mitglied
Hallo zusammen,

ich möchte Date objekt in LocalDate umwandeln:

Mein code ist bis jetzt so:
Code:
protected Optional<LocalDate> getPruefDatum(Object entity) {
        if (entity instanceof KlassA) {
            return Optional.of((KlassA) entity).map(obj -> convertToLocalDateViaInstant(obj));
        }

        return Optional.empty();
    }

    private LocalDate convertToLocalDateViaInstant(KlassAobj) {
            return obj.getDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }

Das Problem hir bei ist, dass es möglich ist getDate() null liefern kann.
Und da fliegt mein Code auf die Fresse.

so kann ich den Code auch nicht modifizieren:

Code:
protected Optional<LocalDate> getPruefDatum(Object entity) {
        if (entity instanceof KlassA) {
            return Optional.of((KlassA) entity).map(obj -> convertToLocalDateViaInstant(obj));
        }

        return Optional.empty();
    }

    private LocalDate convertToLocalDateViaInstant(KlassAobj) {
        if (obj.getDate() != null) {
            return obj.getDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        }
        return null;
        
    }

Wie kann ich denn das Problem beheben??

Danke
 
Liefer einfach ein Optional of LocalDate insgesamt zurück:
Java:
Optional.ofNullable(((KlassA) entity).getDate()).map(d -> d.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
 
Du kannst alternativ auch die Funktion:
Code:
public LocalDate convertToLocalDateViaInstant(Date dateToConvert) {
    return dateToConvert.toInstant()
      .atZone(ZoneId.systemDefault())
      .toLocalDate();
}

und ab Java 8:
Code:
public LocalDate convertToLocalDateViaSqlDate(Date dateToConvert) {
    return new java.sql.Date(dateToConvert.getTime()).toLocalDate();
}
verwenden.
 
Du kannst alternativ auch die Funktion:
Code:
public LocalDate convertToLocalDateViaInstant(Date dateToConvert) {
    return dateToConvert.toInstant()
      .atZone(ZoneId.systemDefault())
      .toLocalDate();
}

und ab Java 8:
Code:
public LocalDate convertToLocalDateViaSqlDate(Date dateToConvert) {
    return new java.sql.Date(dateToConvert.getTime()).toLocalDate();
}
verwenden.
Überseh ich was oder ist das erste nicht genau die Variante aus’m ersten Beitrag?

btw, Java 8 sind die Varianten alle, LocalDate kam ja erst mit Java 8 😉
 
Überseh ich was oder ist das erste nicht genau die Variante aus’m ersten Beitrag?

btw, Java 8 sind die Varianten alle, LocalDate kam ja erst mit Java 8 😉
Da übersiehst du etwas. 😀 Außerdem war die Frage nicht ab wann "LocalDate" in JDK implementiert wurde, sondern wie man Date nach LocalDate konvertiert.😀
 
...sondern wie man Date nach LocalDate konvertiert.
Und genau das hat der TE in seinem ersten Post bereits genauso gelöst wie du es auch vorgeschlagen hast.

Die Frage war nicht, wie man Date im Allgemeinen nach LocalDate konvertiert (das hatte der TE bereits gelöst). Das Problem war, dass das Date (gelesen aus dem Domänenobjekt `entity`) selbst null sein konnte. Und dein Vorschlag ist hierfür nun mal keine Lösung.
 
Da übersiehst du etwas
Was überseh ich denn?

Der Code zum umwandeln vom TO war Date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), deine alternative Funktion war Date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();, sieht für mich gleich aus?


Außerdem war die Frage nicht ab wann "LocalDate" in JDK implementiert wurde, sondern wie man Date nach LocalDate konvertiert.

Ne, die Frage war, wie man das nullsafe macht.
Der Hinweis, dass ab Java 8 als Alternative auch java.sql.Date#toLocalDate geht, ist halt recht überflüssig, wenn der ganze Thread von Java 8-Klassen handelt 😉 genausogut hätte man schreiben können, dass es nur geht, falls man Java nutzt.


Edit: sorry, dass es etwas schnippisch klingt, aber als ich geschrieben hab gab’s im zitierten Beitrag noch keine Smiley die den etwas netter klingen lassen...
 

Zurück
Oben