Een eenvoudige manier is om de minimum- en maximumdatum te converteren naar hun corresponderende epochedag, een willekeurig geheel getal tussen die twee waarden te genereren en deze uiteindelijk terug te converteren naar een LocalDate
. De epoch-dag wordt verkregen met toEpochDay()
dat is het aantal dagen sinds 1970-01-01 (ISO).
Het probleem met het genereren van een willekeurig jaar, dan maand en dan dag is dat je een kleine kans hebt om te vallen met een ongeldige datum (zoals 31 februari). Bovendien garandeert het nemen van een willekeurige epoch-dag een uniforme verdeling over alle mogelijke data.
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);
}
Merk op dat aangezien de minimumdatum eigenlijk de allereerste is, je deze zou kunnen vervangen door 0.
Om deze LocalDate
te converteren in een java.sql.Date
, kunt u verwijzen naar dit bericht
:
java.sql.Date date = java.sql.Date.valueOf(randomDate);