Jednoduchým způsobem je převést minimální a maximální datum na odpovídající den epochy, vygenerovat náhodné celé číslo mezi těmito dvěma hodnotami a nakonec je převést zpět na LocalDate
. Den epochy se získá pomocí toEpochDay()
což je počet dní od 1. 1. 1970 (ISO).
Problém s generováním náhodného roku, pak měsíce a potom dne je ten, že máte malou šanci, že spadnete s neplatným datem (např. 31. února). Použití náhodného dne epochy také zaručuje rovnoměrné rozložení napříč všemi možnými daty.
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);
}
Všimněte si, že protože minimální datum je ve skutečnosti úplně první, můžete ho nahradit 0.
Chcete-li převést toto LocalDate
do java.sql.Date
, můžete se podívat na tento příspěvek
:
java.sql.Date date = java.sql.Date.valueOf(randomDate);