sql >> Databasteknik >  >> RDS >> Mysql

Generera ett slumpmässigt LocalDate med java.time

Ett enkelt sätt är att konvertera lägsta och högsta datum till motsvarande epokdag, generera ett slumpmässigt heltal mellan dessa två värden och slutligen konvertera tillbaka det till ett LocalDate . Epokdagen erhålls med toEpochDay() vilket är antalet dagar sedan 1970-01-01 (ISO).

Problemet med att generera ett slumpmässigt år, sedan månad och sedan dag är att du har en liten chans att falla med ett ogiltigt datum (som 31 februari). Att ta en slumpmässig epokdag garanterar också en enhetlig fördelning över alla möjliga datum.

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

Observera att eftersom minimidatumet faktiskt är det allra första kan du ersätta det med 0.

För att konvertera denna LocalDate till en java.sql.Date , du kan hänvisa till det här inlägget :

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


  1. SQLPlus - spoolning till flera filer från PL/SQL-block

  2. komma efter latitud och longitud i laravel 5 med andra sammanfogningar

  3. AUTO_INCREMENT och LAST_INSERT_ID

  4. Hur gör jag en annan MySQL-kolumn för automatisk ökning?