Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Gere um LocalDate aleatório com java.time


Uma maneira simples é converter a data mínima e máxima para o dia da época correspondente, gerar um número inteiro aleatório entre esses dois valores e, finalmente, convertê-lo de volta para um LocalDate . O dia da época é obtido com toEpochDay() que é a contagem de dias desde 1970-01-01 (ISO).

O problema de gerar um ano aleatório, depois um mês e depois um dia é que você tem uma pequena chance de cair com uma data inválida (como 31 de fevereiro). Além disso, tomar um dia de época aleatório garante uma distribuição uniforme em todas as datas possíveis.
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);
}

Observe que, como a data mínima é realmente a primeira, você pode substituí-la por 0.

Para converter este LocalDate em um java.sql.Date , você pode consultar esta postagem :
java.sql.Date date = java.sql.Date.valueOf(randomDate);