Mysql
 sql >> Database >  >> RDS >> Mysql

Genera un LocalDate casuale con java.time

Un modo semplice è convertire la data minima e massima nel giorno dell'epoca corrispondente, generare un intero casuale tra questi due valori e infine riconvertirlo in un LocalDate . Il giorno dell'epoca si ottiene con toEpochDay() che è il conteggio dei giorni dal 1970-01-01 (ISO).

Il problema con la generazione di un anno, quindi mese e poi giorno casuali è che hai una piccola possibilità di cadere con una data non valida (come il 31 febbraio). Inoltre, prendere un giorno di epoca casuale garantisce una distribuzione uniforme in tutte le date possibili.

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);
}

Nota che poiché la data minima è in realtà la prima, puoi sostituirla con 0.

Per convertire questo LocalDate in un java.sql.Date , puoi fare riferimento a questo post :

java.sql.Date date = java.sql.Date.valueOf(randomDate);