Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wygeneruj losową LocalDate z java.time

Prostym sposobem jest przekonwertowanie daty minimalnej i maksymalnej na odpowiadający im dzień epoki, wygenerowanie losowej liczby całkowitej między tymi dwiema wartościami, a następnie przekonwertowanie jej z powrotem na LocalDate . Dzień epoki uzyskuje się za pomocą toEpochDay() czyli liczba dni od 1970-01-01 (ISO).

Problem z wygenerowaniem losowego roku, potem miesiąca, a potem dnia polega na tym, że masz małą szansę na wypadnięcie z nieprawidłową datą (np. 31 lutego). Ponadto wybranie losowego dnia epoki gwarantuje równomierny rozkład na wszystkie możliwe daty.

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

Zwróć uwagę, że ponieważ data minimalna jest w rzeczywistości pierwszą, możesz ją zastąpić 0.

Aby przekonwertować ten LocalDate w java.sql.Date , możesz zapoznać się z tym postem :

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz zestawienie z wielu tabel ze zmiennymi danymi wejściowymi

  2. Jak usunąć wiersze z tabeli łączenia (ManyToMany) w Doctrine?

  3. MySQL - Grupuj według z zamówieniem według DESC

  4. mysqli_real_escape_string i problem z podwójnymi cudzysłowami

  5. lepsze podejście niż przechowywanie hasła mysql w postaci zwykłego tekstu w pliku konfiguracyjnym?