sql >> Base de Datos >  >> RDS >> Mysql

Genere una LocalDate aleatoria con java.time

Una forma sencilla es convertir la fecha mínima y máxima a su día de época correspondiente, generar un número entero aleatorio entre esos dos valores y finalmente convertirlo de nuevo a una LocalDate . El día de época se obtiene con toEpochDay() que es el conteo de días desde 1970-01-01 (ISO).

El problema de generar un año aleatorio, luego un mes y luego un día es que tiene una pequeña posibilidad de caer con una fecha no válida (como el 31 de febrero). Además, tomar un día de época aleatorio garantiza una distribución uniforme en todas las fechas posibles.

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

Tenga en cuenta que dado que la fecha mínima es en realidad la primera, puede reemplazarla con 0.

Para convertir este LocalDate en un java.sql.Date , puede consultar esta publicación :

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