convert Date to LocalDate

Diskutiere convert Date to LocalDate im Java Basics - Anfänger-Themen Bereich.
G

guguli

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
 
H

httpdigest

Liefer einfach ein Optional of LocalDate insgesamt zurück:
Java:
Optional.ofNullable(((KlassA) entity).getDate()).map(d -> d.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
 
T

TM69

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.
 
mrBrown

mrBrown

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

TM69

Ü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. :D Außerdem war die Frage nicht ab wann "LocalDate" in JDK implementiert wurde, sondern wie man Date nach LocalDate konvertiert.:D
 
H

httpdigest

...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.
 
mrBrown

mrBrown

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...
 
mihe7

mihe7

Also mich würde immer noch wesentlich mehr interessieren, wofür er instanceof braucht :)
 
G

guguli

Also mich würde immer noch wesentlich mehr interessieren, wofür er instanceof braucht :)
weil mein Entity auch von anderen Objekten sein kann. :) Das programm ist sehr kompliziert und alt :D ich hab es so übernommen und das ganze zu refactor ist sehr zeit aufwändig :).
aber mein Problem wurde schon vom @httpdigest gelöst. Danke
 
Thema: 

convert Date to LocalDate

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben