Един прост начин е да конвертирате минималната и максималната дата в съответния ден от епохата, да генерирате произволно цяло число между тези две стойности и накрая да го преобразувате обратно в LocalDate
. Денят на епохата се получава с toEpochDay()
което е броят на дните от 1970-01-01 (ISO).
Проблемът с генерирането на произволна година, след това месец и след това ден е, че имате малък шанс да паднете с невалидна дата (като 31 февруари). Освен това вземането на случаен ден от епохата гарантира равномерно разпределение на всички възможни дати.
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);
}
Имайте предвид, че тъй като минималната дата всъщност е първата, можете да я замените с 0.
За да конвертирате този LocalDate
в java.sql.Date
, можете да се обърнете към тази публикация
:
java.sql.Date date = java.sql.Date.valueOf(randomDate);