Generate random date of birth

Viewed 112099

I'm trying to generate a random date of birth for people in my database using a Java program. How would I do this?

15 Answers

You can checkout randomizer for random data generation.This library helps to create random data from given Model class.Checkout below example code.

public class Person {

    @DateValue( from = "01 Jan 1990",to = "31 Dec 2002" , customFormat = "dd MMM yyyy")
    String dateOfBirth;

}

//Generate random 100 Person(Model Class) object 
Generator<Person> generator = new Generator<>(Person.class);  
List<Person> persons = generator.generate(100);                          

As there are many built in data generator is accessible using annotation,You also can build custom data generator.I suggest you to go through documentation provided on library page.

simplest method:

public static LocalDate randomDateOfBirth() {
    final int maxAge = 100 * 12 * 31;
    return LocalDate.now().minusDays(new Random().nextInt(maxAge));
}

Using the original answer and adapting it to the new java.time.* api and adding ways to generate n random dates -- the function will return a List.

// RandomBirthday.java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class RandomBirthday {

    public static List<String> getRandomBirthday(int groupSize, int minYear, int maxYear) {
        /** Given a group size, this method will return `n` random birthday
         * between 1922-2022 where `n=groupSize`.
         * 
         * @param   groupSize   the number of random birthday to return
         * @param   minYear     the min year [lower bound]
         * @param   maxYear     the max year [upper bound]
         * @return              a list of random birthday with format YYYY-MM-DD
         */
        
        ArrayList<String> birthdays = new ArrayList<>();
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        for (int i = 0; i < groupSize; i++) {
            LocalDate baseDate = LocalDate.now();
            LocalDate baseYear = baseDate.withYear(ThreadLocalRandom.current().nextInt(minYear, maxYear));

            int dayOfYear = ThreadLocalRandom.current().nextInt(1, baseYear.lengthOfYear());

            LocalDate baseRandBirthday = baseYear.withDayOfYear(dayOfYear);

            LocalDate randDate = LocalDate.of(
                baseRandBirthday.getYear(),
                baseRandBirthday.getMonth(),
                baseRandBirthday.getDayOfMonth()
            );

            
            String formattedDate = dateFormat.format(randDate);
            birthdays.add(formattedDate);
        }

        return birthdays;
    }

    public static void main(String[] args) {
        // main method
        List<String> bDay = getRandomBirthday(40, 1960, 2022);
        System.out.println(bDay);
    }
}
int num = 0;
char[] a={'a','b','c','d','e','f'};
String error = null;
try {
    num = Integer.parseInt(request.getParameter("num"));
    Random r = new Random();
    long currentDate = new Date().getTime();
    ArrayList<Student> list = new ArrayList<>();
    for (int i = 0; i < num; i++) {
        String name = "";
        for (int j = 0; j < 6; j++) {
            name += a[r.nextInt(5)];
        }

        list.add(new Student(i + 1, name, r.nextBoolean(), new Date(Math.abs(r.nextLong() % currentDate))));
    }

    request.setAttribute("list", list);
    request.setAttribute("num", num);
    request.getRequestDispatcher("student.jsp").forward(request, response);
} catch (NumberFormatException e) {
    error = "Please enter interger number";
    request.setAttribute("error", error);
    request.getRequestDispatcher("student.jsp").forward(request, response);
}
Related