Cara sederhana adalah dengan mengonversi tanggal minimum dan maksimum ke hari Epoch yang sesuai, menghasilkan bilangan bulat acak di antara kedua nilai tersebut dan akhirnya mengubahnya kembali menjadi LocalDate
. Hari epoch diperoleh dengan toEpochDay()
yang merupakan hitungan hari sejak 1970-01-01 (ISO).
Masalah dengan menghasilkan tahun acak, lalu bulan dan kemudian hari adalah Anda memiliki peluang kecil untuk jatuh dengan tanggal yang tidak valid (seperti 31 Februari). Selain itu, mengambil hari epoch acak menjamin distribusi yang seragam di semua tanggal yang memungkinkan.
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);
}
Perhatikan bahwa karena tanggal minimum sebenarnya adalah yang pertama, Anda dapat menggantinya dengan 0.
Untuk mengonversi LocalDate
ini menjadi java.sql.Date
, Anda dapat merujuk ke postingan ini
:
java.sql.Date date = java.sql.Date.valueOf(randomDate);