Estoy buscando un código breve y moderno de C # para generar una fecha aleatoria entre el 1 de enero de 1995 y la fecha actual.
Estoy pensando en alguna solución que utilice Enumerable. El rango de alguna manera puede hacer que esto sea más conciso.
Respuestas:
Para un mejor rendimiento si esto se llama repetidamente, cree las variables
start
ygen
(y tal vez inclusorange
) fuera de la función.fuente
Esto es una ligera respuesta al comentario de Joel sobre hacer una versión ligeramente más optimizada. En lugar de devolver una fecha aleatoria directamente, ¿por qué no devolver una función generadora a la que se pueda llamar repetidamente para crear una fecha aleatoria?
fuente
for (int i = 0; i < 100; i++) { array[i].DateProp = RandomDayFunc()(); }
var getRandomDate = RandomDayFunc();
luego la llamas para obtener fechas aleatorias:var randomDate = getRandomDate();
recuerda que debes reutilizar getRandomDate para que esto sea más útil que la respuesta de Joel.Tomé la respuesta de @Joel Coehoorn e hice los cambios que aconsejó: eliminar la variable del método y poner todo en clase. Además, ahora el tiempo también es aleatorio. Aquí está el resultado.
Y un ejemplo de cómo usar para escribir 100 DateTimes al azar en la consola:
fuente
range = (int)(DateTime.Today - start).TotalSeconds;
yreturn start.AddSeconds(gen.Next(range));
.Bueno, si va a presentar una optimización alternativa, también podemos buscar un iterador:
podrías usarlo así:
fuente
Comience con un objeto de fecha fija (1 de enero de 1995) y agregue un número aleatorio de días con AddDays (obviamente, preste atención sin superar la fecha actual).
fuente
Llego un poco tarde al juego, pero aquí hay una solución que funciona bien:
fuente
Pequeño método que devuelve una fecha aleatoria como cadena, basada en algunos parámetros de entrada simples. Construido en base a las variaciones de las respuestas anteriores:
fuente