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