簡単な方法は、最小日と最大日を対応するエポック日に変換し、これら2つの値の間にランダムな整数を生成し、最後にそれを LocalDate
に戻すことです。 。エポック日は、<で取得されます。 code> toEpochDay()
これは、1970-01-01(ISO)からの日数です。
ランダムな年、月、日を生成する際の問題は、無効な日付(2月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);