Eine einfache Möglichkeit besteht darin, das minimale und maximale Datum in den entsprechenden Epochentag umzuwandeln, eine zufällige Ganzzahl zwischen diesen beiden Werten zu generieren und sie schließlich wieder in ein LocalDate
umzuwandeln . Den Epochentag erhält man mit toEpochDay()
das ist die Anzahl der Tage seit dem 01.01.1970 (ISO).
Das Problem beim Generieren eines zufälligen Jahres, dann eines Monats und dann eines Tages besteht darin, dass Sie eine geringe Wahrscheinlichkeit haben, mit einem ungültigen Datum (wie dem 31. Februar) zu fallen. Außerdem garantiert die Verwendung eines zufälligen Epochentages eine gleichmäßige Verteilung über alle möglichen Daten.
public static void main(String... args) {
long minDay = LocalDate.of(1970, 1, 1).toEpochDay();
long maxDay = LocalDate.of(2015, 12, 31).toEpochDay();
long randomDay = ThreadLocalRandom.current().nextLong(minDay, maxDay);
LocalDate randomDate = LocalDate.ofEpochDay(randomDay);
System.out.println(randomDate);
}
Beachten Sie, dass Sie es durch 0 ersetzen könnten, da das Mindestdatum eigentlich das allererste ist.
Um dieses LocalDate
zu konvertieren in ein java.sql.Date
, können Sie auf diesen Beitrag
verweisen :
java.sql.Date date = java.sql.Date.valueOf(randomDate);