Cómo generar `datetime`s aleatorios entre dos fechas
Para el proyecto de ejemplo sobre cómo mostrar valores de un json en el admin de Django tuve la necesidad de generar datos aleatorios, concretamente timestamps. Podría haber utilizado alguna librería especializada como faker (que tiene un método dedicado) pero decidí hacerlo a mano para evitar instalar una dependencia solo para eso.
Una forma de representar una fecha y hora es mediante lo que se conoce como el Unix Time, que según la Wikipedia:
Tiempo Unix o Tiempo POSIX es un sistema para la descripción de instantes de tiempo: se define como la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970, sin contar segundos intercalares.
En Python podemos obtener un objeto datetime a partir de un timestamp usando la función datetime.fromtimestamp,
pero también podemos obtener un timestamp a partir de un datetime usando el método .timestamp(), por lo que podemos usar estos dos
hechos para obtener un datetime aleatorio entre un punto de inicio y fin.
¿Cómo? Convirtiendo las fechas de inicio a fin a timestamp y generando un número aleatorio entre esos dos números. Como Python devuelve
el timestamp como un float tenemos que usar random.uniform (que funciona con floats) en vez de random.randrange (que trabaja con ints).
PD: Si no nos importan los milisegundos también podemos convertir los timestamps a int y usar random.randrange