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

Generer en tilfældig LocalDate med java.time

En enkel måde er at konvertere minimums- og maksimumsdatoen til deres tilsvarende epokedag, generere et tilfældigt heltal mellem disse to værdier og til sidst konvertere det tilbage til en LocalDate . Epokedagen opnås med toEpochDay() som er optællingen af ​​dage siden 1970-01-01 (ISO).

Problemet med at generere et tilfældigt år, derefter måned og derefter dag er, at du har en lille chance for at falde med en ugyldig dato (som 31. februar). At tage en tilfældig epokedag garanterer også en ensartet fordeling på tværs af alle mulige datoer.

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

Bemærk, at da minimumsdatoen faktisk er den allerførste, kan du erstatte den med 0.

For at konvertere denne LocalDate ind i en java.sql.Date , du kan henvise til dette indlæg :

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


  1. Optimizer-begrænsninger med filtrerede indekser

  2. Multi-Cloud Full Database Cluster Failover indstillinger for PostgreSQL

  3. Vælg forespørgsel ved hjælp af IN() og uden nogen sortering

  4. SQLite AUTOINCREMENT