Introduction
When working with dates, times and durations in Python, it is common to use the timedelta object from the datetime library. This object represents a duration of time and can be used for calculations and comparisons between different dates. But how can we extract the number of days from a timedelta object ?
In this tutorial, we will explore different ways to accomplish this task using Python and the powerful numpy
library.
Using the days attribute
The most straightforward way to extract the number of days from a timedelta
object is by accessing its days
attribute. This attribute contains the total number of days in the duration represented by the object. As an illustration, we can create two dates and calculate the difference between them using the datetime module:
import datetime
start_date = datetime.date(2019, 8, 3)
end_date = datetime.date(2019, 8, 9)
delta = end_date - start_date
Please note that calling
type(delta)
will return a timedelta object.
This code creates two datetime objects. Then, we calculate the difference between these two dates using the -
operator, which results in a timedelta
object. Finally, we can extract the number of days by accessing the days
attribute of the delta
object:
delta.days
will output the value
6
Common error
One of the most common errors that people encounter is when they mistakenly use the "day" method instead of the "days" method on a timedelta object. This mistake leads to an
delta.day
AttributeError: 'datetime.timedelta' object has no attribute 'day'
It is important to remember that the correct attribute name is "days" and not "day."
Using total_seconds()
Another way to extract the number of days from a timedelta
object is by converting it into a total number of days. This means that all the components in the duration, such as hours, minutes and seconds, will be converted into their equivalent value in days.
To do this conversion, we can use the total_seconds()method of the
timedelta` object and then divide the result by the total number of seconds in a day (86400):
total_days = delta.total_seconds() / 86400
print( total_days )
Output
6.0
Note that this conversion will always return a floating-point value, even if the duration is an exact number of days.
Another example
import datetime
start_date = datetime.datetime(2019, 8, 3, 15, 30)
end_date = datetime.datetime(2019, 8, 9, 20, 42)
delta = end_date - start_date
total_days = delta.total_seconds() / 86400
print( total_days )
Output
6.216666666666667
Please note that the datetime mentioned above is used specifically to create a datetime object with hours and minutes, rather than a date as previously mentioned.
Working with a numpy array, which consists of dates
Please note that when working with arrays of dates, calculating the difference between two dates allows us to directly obtain the number of days that separate them.
Example 1
from numpy import timedelta64
D1 = np.array(['2019-07-23', '2019-08-03', '2019-08-29'], dtype='datetime64[D]')
D2 = np.array(['2019-07-15', '2019-08-22', '2019-08-29'], dtype='datetime64[D]')
DELTA = D2 - D1
Ouput
array([-8, 19, 0], dtype='timedelta64[D]')
Example 2
from numpy import timedelta64
D1 = np.array(['2019-07-23T13:30', '2019-08-03T13:30', '2019-08-29T03:30'], dtype='datetime64')
D2 = np.array(['2019-07-15T17:30', '2019-08-22T03:30', '2019-08-29T03:30'], dtype='datetime64')
DELTA = D2 - D1
Please note that in this case, the difference between the two dates is measured in minutes:
array([-11280, 26760, 0], dtype='timedelta64[m]')
If we wish to express it in terms of days, we can follow the following approach:
DELTA.astype('int') * 1.0 / (24 * 60)
gives
array([-7.83333333, 18.58333333, 0. ])
References
Links | Site |
---|---|
datetime | docs.python.org |
How to add or subtract a certain number of days from a given date in python ? | moonbooks.org |