Working with datetime can be a bit daunting and challenging, and handling datetime in Python is no exception. Python's built-in
datetime module introduced us to several classes -
timedelta, and several external libraries have spawned to address the issues present in the official module, such as Arrow.
In this guide, we'll take a look at how to perform time and date arithmetic, alteration and truncation of datetime objects in Delorean - a library built upon pytz which is the standard library for solving problems relating to time zones, and dateutil which is used to calculate deltas between any 2 given datetime objects.
Installing Delorean Setting Up a Virtual Environment
Delorean is available for installation via
pip. It is generally advisable to work in a virtual environment because it enables you to organize dependencies required by different projects isolated.
On Linux, or MacOS to create a virtual environment, we'd run:
python3 -m venv env source env/bin/activate python3 -m pip install delorean
Alternatively, on Windows we can run:
virtualenv env .\env\Scripts\activate python3 -m pip install delorean
Adding and Subtracting Time with Timedelta
timedelta represents the difference between two
datetime objects, and has a microsecond resolution. Using
timedelta, we can define durations of different length, such as
It doesn't contain any information about dates - just the duration. The
timedelta between the 5th of June and the 10th of June is the same as the
timedelta between the 5th of May and the 10th of May - 5 days.
This makes it really easy to add or subtract a duration of time from
from delorean import Delorean import datetime dt_tm_future = Delorean() dt_tm_future += datetime.timedelta(days=3) dt_tm_past = Delorean() dt_tm_past -= datetime.timedelta(weeks=3) print("The date 3 days from now is: ", dt_tm_future) print("The date 3 weeks before now was: ", dt_tm_past)
This results in:
The date 3 days from now is: Delorean(datetime=datetime.datetime(2021, 7, 17, 10, 22, 51, 403546), timezone='UTC') The date 3 weeks before now was: Delorean(datetime=datetime.datetime(2021, 6, 23, 10, 22, 51, 403643), timezone='UTC')
Get Number Of Days Between Dates with Delorean
A common unknown with multiple dates is the number of days between two given dates. This result is typically packed in a
timedelta object given the fact that it's designed to represent this difference.
Given how easy it is to add or subtract
timedelta from and to dates, it's only natural that this operation is easy as well.
To get the number of days between two dates in Python with Delorean, we just subtract the dates, which results in a
timedelta representation of the difference:
present_date = Delorean() new_year = Delorean(datetime=datetime.datetime(2022, 1, 1), timezone='UTC') until_new_year = new_year - present_date print("Days until 2022 ", until_new_year) print("Days till 2022 ", until_new_year.days)
We can print the entire
timedelta object, or just access its
Days until 2022 170 days, 13:24:22.817417 Days till 2022 170
Alteration of Time and Date
Delorean lets you effortlessly alter datetime objects by replacing or shifting values. For this, we use the
replace() method lets you replace a certain aspect of the datetime instance, while
shift() lets you shift the timezone:
Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!
from delorean import Delorean date = Delorean(datetime=datetime.datetime(2021, 5, 14, 12), timezone='Europe/Paris') altered_tm = date.replace(hour=10) altered_dt = date.replace(month=10) print("Altered time is:", altered_tm) print("Altered date is:", altered_dt) altered_dt.shift('US/Pacific') print("Shifted object:", altered_dt)
We've created a
Delorean instance, changed its
month attributes, and then shifted the new, altered datetime object into a new timezone:
Altered time is: Delorean(datetime=datetime.datetime(2021, 5, 14, 10, 0), timezone='Europe/Paris') Altered date is: Delorean(datetime=datetime.datetime(2021, 10, 14, 12, 0), timezone='Europe/Paris') Shifted object: Delorean(datetime=datetime.datetime(2021, 10, 14, 3, 0), timezone='US/Pacific')
Truncate Datetime Objects with Delorean
Depending on the reason you're using
datetime for - you might not care about the smaller-order measurements such as seconds or milliseconds. While you can simply print out the data without the measurements - you can also
truncate() them out of the
Delorean object itself.
The method works on higher-order measurements as well, and accepts all valid Delorean time frames, up to
from delorean import Delorean date = Delorean() print("Date before truncation:", date) trun_min = date.truncate('minute') # Truncate to minutes print("Truncated to minutes = ", trun_min)
It's worth noting that you're truncating to a certain measurement level. That's to say - if you truncate to minutes - seconds and milliseconds will be dropped. In essence - you're setting the resolution of the
Date before truncation: Delorean(datetime=datetime.datetime(2021, 7, 14, 10, 52, 9, 893770), timezone='UTC') Truncated to minutes = Delorean(datetime=datetime.datetime(2021, 7, 14, 10, 52), timezone='UTC')
In this guide, we've taken a look at how to perform time and date arithmetic, alteration and truncation in Python with Delorean.