How to generate a random date within a specified range using Python ?


Introduction

Before diving into generating random dates, let's first understand what exactly are random dates and why would we need them. A date is a combination of a day, month, and year. A random date can be any date within a specified range, chosen with equal probability. Used in various applications such as simulation studies, data analysis, and testing algorithms.

In this tutorial, we will discuss how to generate random dates using Python with the help of the numpy library.

Creating start and end dates using the python datetime module

The datetime module provides classes for manipulating dates and times in a simple and efficient way. We will be using the datetime class to create our start and end dates.

To use the datetime module, we need to import it first:

import datetime

After importing the module, we can create our starting date by specifying the year, month, and day:

year = 2019
month = 8
day = 1

star_date = datetime.datetime(year,month,day)

Similarly, we can create an end date by specifying the year, month, and day:

day = 10

end_date = datetime.datetime(year,month,day)

Defining a Python function that generates a random date within a given range

Now that we have our starting and ending dates, we can create a function that generates a random date between them.

from random import randrange
from datetime import timedelta

def random_date(star_date, end):
    delta = end_date - star_date
    delta_in_second = (delta.days * 24 * 60 * 60) + delta.seconds
    random_second = randrange(delta_in_second)
    return star_date + timedelta(seconds=random_second)

The function takes in the start and end date as parameters and calculates the difference between them. Then, using the randrange() function from the random module, it generates a random number of seconds within that range. Finally, it adds those seconds to the starting date and returns a randomly generated date.

Here is an example

random_date(star_date, end_date)

will produce the following output:

datetime.datetime(2019, 8, 1, 20, 14, 25)

Another example

for i in range(10):
    print( random_date(star_date, end_date) )

Which would produce the following output:

2019-08-04 09:26:26
2019-08-06 02:57:18
2019-08-07 07:46:18
2019-08-09 20:13:33
2019-08-08 19:49:19
2019-08-02 23:36:40
2019-08-03 05:18:47
2019-08-06 06:23:18
2019-08-02 08:29:56
2019-08-06 02:21:47

References

Links Site
datetime docs.python.org
random docs.python.org