En enkel måde er at konvertere minimums- og maksimumsdatoen til deres tilsvarende epokedag, generere et tilfældigt heltal mellem disse to værdier og til sidst konvertere det tilbage til en LocalDate
. Epokedagen opnås med toEpochDay()
som er optællingen af dage siden 1970-01-01 (ISO).
Problemet med at generere et tilfældigt år, derefter måned og derefter dag er, at du har en lille chance for at falde med en ugyldig dato (som 31. februar). At tage en tilfældig epokedag garanterer også en ensartet fordeling på tværs af alle mulige datoer.
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);
}
Bemærk, at da minimumsdatoen faktisk er den allerførste, kan du erstatte den med 0.
For at konvertere denne LocalDate
ind i en java.sql.Date
, du kan henvise til dette indlæg
:
java.sql.Date date = java.sql.Date.valueOf(randomDate);