Saltar al contenido

Generar fecha de nacimiento aleatoria

Presta atención porque en este tutorial vas a encontrar el arreglo que buscas.Este artículo ha sido probado por nuestros expertos para asegurar la calidad y veracidad de nuestro contenido.

Solución:

import java.util.GregorianCalendar;

public class RandomDateOfBirth 

    public static void main(String[] args) 

        GregorianCalendar gc = new GregorianCalendar();

        int year = randBetween(1900, 2010);

        gc.set(gc.YEAR, year);

        int dayOfYear = randBetween(1, gc.getActualMaximum(gc.DAY_OF_YEAR));

        gc.set(gc.DAY_OF_YEAR, dayOfYear);

        System.out.println(gc.get(gc.YEAR) + "-" + (gc.get(gc.MONTH) + 1) + "-" + gc.get(gc.DAY_OF_MONTH));

    

    public static int randBetween(int start, int end) 
        return start + (int)Math.round(Math.random() * (end - start));
    

java.util.Date tiene un constructor que acepta milisegundos desde The Epoch, y java.util.Random tiene un método que puede darte un número aleatorio de milisegundos. Querrá establecer un rango para el valor aleatorio según el rango de fechas de nacimiento que desee, pero esos deberían hacerlo.

Muy aproximadamente:

Random  rnd;
Date    dt;
long    ms;

// Get a new random instance, seeded from the clock
rnd = new Random();

// Get an Epoch value roughly between 1940 and 2010
// -946771200000L = January 1, 1940
// Add up to 70 years to it (using modulus on the next long)
ms = -946771200000L + (Math.abs(rnd.nextLong()) % (70L * 365 * 24 * 60 * 60 * 1000));

// Construct a date
dt = new Date(ms);

Fragmento de una solución basada en Java 8:

Random random = new Random();
int minDay = (int) LocalDate.of(1900, 1, 1).toEpochDay();
int maxDay = (int) LocalDate.of(2015, 1, 1).toEpochDay();
long randomDay = minDay + random.nextInt(maxDay - minDay);

LocalDate randomBirthDate = LocalDate.ofEpochDay(randomDay);

System.out.println(randomBirthDate);

Nota: Esto genera una fecha aleatoria entre el 1 de enero de 1900 (incluido) y el 1 de enero de 2015 (exclusivo).

Nota: Se basa en días de época, es decir, días relativos al 1 de enero de 1970 (EPOCH) – significado positivo después de EPOCH, significado negativo antes de EPOCH


También puede crear una pequeña clase de utilidad:

public class RandomDate 
    private final LocalDate minDate;
    private final LocalDate maxDate;
    private final Random random;

    public RandomDate(LocalDate minDate, LocalDate maxDate) 
        this.minDate = minDate;
        this.maxDate = maxDate;
        this.random = new Random();
    

    public LocalDate nextDate() 
        int minDay = (int) minDate.toEpochDay();
        int maxDay = (int) maxDate.toEpochDay();
        long randomDay = minDay + random.nextInt(maxDay - minDay);
        return LocalDate.ofEpochDay(randomDay);
    

    @Override
    public String toString() 
        return "RandomDate" +
                "maxDate=" + maxDate +
                ", minDate=" + minDate +
                '';
    

y usarlo así:

RandomDate rd = new RandomDate(LocalDate.of(1900, 1, 1), LocalDate.of(2010, 1, 1));
System.out.println(rd.nextDate());
System.out.println(rd.nextDate()); // birthdays ad infinitum

Sección de Reseñas y Valoraciones

No se te olvide compartir este post si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *