Python How-To: Working With Dates And Times In Python
Tags: python, beginners, programming, devops
Published: 2023-05-23 12:05:00


- [Introduction](#introduction)
- [Using The datetime Python Library](#using-the-datetime-python-library)
  - [Displaying The Current Date And Time](#displaying-the-current-date-and-time)
  - [Displaying The Current Date](#displaying-the-current-date)
  - [Displaying The Current Time](#displaying-the-current-time)
  - [Calculate The Difference Between Two Dates](#calculate-the-difference-between-two-dates)
  - [Calculate The Difference Between Two Times](#calculate-the-difference-between-two-times)
  - [Calculate The Difference Between Two Dates And Times](#calculate-the-difference-between-two-dates-and-times)
  - [Converting Between Date Formats](#converting-between-date-formats)
  - [Working With Dates / Times In Different Timezones](#working-with-dates--times-in-different-timezones)
- [Conclusion](#conclusion)
- [References](#references)

## Introduction

Working with dates and times is something that comes up frequently when building solutions with any programming language. Most languages, including Python, will have a library built-in that can be used to work with dates and time.

For Python, there is a built-in library called `datetime` that can be used to simplify working with dates and time based date.

## Using The datetime Python Library

As the `datetime` library is built-into Python, there is nothing, other than Python to install. Let us look at some examples of how to use the `datetime` library.

### Displaying The Current Date And Time

First, let's get the current date and time:

``` python
import datetime

print(f"Current Date & Time: {datetime.datetime.now()}")
```

Output:

``` bash
Current Date & Time: 2023-04-22 20:04:05.506534
```

Using the `datetime.datetime.now()` method provides both the current date and time of the system it is run on.

By default, the date is formatted as year-month-day. This is known as the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) standard date format.

### Displaying The Current Date

Now let's get just the current date:

``` python
import datetime

print(f"Date: {datetime.datetime.now().date()}")
```

Output:

``` bash
Date: 2023-04-22
```

The syntax is very much the same as getting the date and time but adding `.date()` to the end will display only the date.

### Displaying The Current Time

Next, let's get just the current time:

``` python
import datetime

print(f"Time: {datetime.datetime.now().time()}")
```

Output:

``` bash
Time: 20:04:05.506567
```

This is basically the same as getting just the date but instead of adding `.date()` to the end, adding `.time()` returns just the time.

### Calculate The Difference Between Two Dates

Working out the difference between two dates and / or times is something that is done frequently. First, let's look at an example of how to work out the time difference between two dates:

``` python
import datetime

date_one = datetime.date(year=2023, month=4, day=22)
date_two = datetime.date(year=2022, month=3, day=22)

print(f"The time difference is: {date_one - date_two}")
```

Output:

``` bash
The time difference is: 396 days, 0:00:00
```

For each of the two date variables, a date is specified using the `datetime.date()` method, with a year, month and day specified for each.

From there, a simple subtraction of one from the other is performed to work out the difference.

### Calculate The Difference Between Two Times

Now, let's look at another example but instead of showing the difference between two dates, show the difference between two times:

``` python
import datetime

time_one = datetime.timedelta(hours = 15, minutes = 52)
time_two = datetime.timedelta(hours = 13, minutes = 58)

print(f"The time difference is: {time_one - time_two}")
```

Output:

``` bash
The time difference is: 1:54:00
```

This is very similar to the previous date example but it uses the `timedelta()` method to set the time. Using the `time()` method is not an option as it doesn't allow for mathematical operations to be performed against it.

### Calculate The Difference Between Two Dates And Times

To wrap up working out the differences between two dates or times, let's take a look at an example of how to work out the difference between two dates and times:

``` python
import datetime

date_time_one = datetime.datetime(year = 2023, month = 4, day = 22, 
                                  hour = 11, minute = 52)
date_time_two = datetime.datetime(year = 2022, month = 3, day = 22, 
                                  hour = 13, minute = 58)

print(f"The time difference is: {date_time_one - date_time_two}")
```

Output:

``` bash
The time difference is: 395 days, 21:54:00
```

This method basically uses the same method as working out the difference between two dates with additional arguments being passed for the hours and minutes. Seconds and milliseconds can also be passed, if needed.

### Converting Between Date Formats

Working with different formatted dates is another common occurrence. There are three main date formats that are typically used:

- Year, Month, Day (ISO standard, which is Python's default format)
- Day, Month, Year (European standard)
- Month, Day, Year (U.S.A standard)

Converting between these formats in Python is easy to do with the `datetime` library. The following example will show how to convert from the ISO format to both the European and U.S.A standard formats:

``` python
import datetime

current_date = datetime.datetime.now()

print(f"Default Date Format: {current_date.date()}")
print(f"Current Time: {current_date.strftime('%H:%M:%S')}\n")
print(f"U.S.A Date Format: {current_date.strftime('%m/%d/%Y')}")
print(f"European Date Format: {current_date.strftime('%d/%m/%Y')}")
```

Output:

``` bash
Default Date Format: 2023-04-22
Current Time: 20:04:05

U.S.A Date Format: 04/22/2023
European Date Format: 22/04/2023
```

The above example sets the `current_date` variable to the current date and time. That is then used to convert the date using the `strftime()` method to the format that is required.

To explain what the `%m/%d/%Y` and `%d/%m/%Y` mean inside the `strftime()` method:

- `%m` is the month as a number.
- `%d` is the day.
- `%Y` is the full year (2023 for example).
- `/` is used as the divider. It can be anything but it is best to use `/` or a `-`.

If the month needs to be the full name, rather than a number, change it from `%m` to `%B`.

The date would then be `April/22/2023` or `22/April/2023`. This output format doesn't look ideal so change the output format to `%B %d, %Y` (`April 22, 2023`) or `%d %B, %Y` (`22 April, 2023`), both of which are more standard formats.

### Working With Dates / Times In Different Timezones

Last but not least, let's take a look at working with different timezones.

There is a built-in method within the `datetime` library for handling timezones but there is a simpler solution for it in the form of a third-party library called [pytz](https://pypi.org/project/pytz/.

This library isn't installed with Python so it will need to be installed using `pip`:

``` console
pip install pytz
```

Once it is installed, it can be imported and then be called to show all of the timezones available in the library using the `.all_timezones` method.

``` python
import datetime
import pytz

print(pytz.all_timezones)
```

The output is far too long to show but all of the options in the (Python) list it produces can be used to take a date and time and convert it to the appropriate timezone. It won't however though convert the date format to the region of that timezone so that will need to be done manually, if required.

The following example will show a number of timezone conversions for different timezones in different regions / continents:

``` python
import datetime
import pytz

# --- Local time:
local_date_time = datetime.datetime.now()
print(f"Local Time: {local_date_time.strftime('%d/%m/%Y, %H:%M:%S')}\n")


# --- Time in Paris, France:
tz_paris = pytz.timezone("Europe/Paris")
paris_date_time = datetime.datetime.now(tz = tz_paris)
print(f"Paris Time: {paris_date_time.strftime('%d/%m/%Y, %H:%M:%S')}\n")


# --- Time in Canberra, Australia:
tz_canberra = pytz.timezone("Australia/Canberra")
canberra_date_time = datetime.datetime.now(tz = tz_canberra)
print(f"Canberra Time: {canberra_date_time.strftime('%d/%m/%Y, %H:%M:%S')}\n")


# --- Time in Washington D.C, U.S.A:
tz_dc = pytz.timezone("US/Eastern")
dc_date_time = datetime.datetime.now(tz = tz_dc)
print(f"Washington D.C Time: {dc_date_time.strftime('%m/%d/%Y, %H:%M:%S')}\n")
```

Output:

``` console
Local Time: 22/04/2023, 20:04:05

Paris Time: 22/04/2023, 21:04:05

Canberra Time: 23/04/2023, 05:04:05

Washington D.C Time: 04/22/2023, 15:04:05
```

To go over what the code did, let's take the Washington D.C example as they are all the same, except for the local time example and the date format.

- `tz_dc` - This sets the variable to the US/Eastern timezone.
- `dc_date_time` - This gets the date and time as normal but passing the `tz = dc_date_time` argument will set the date and time to that in the US/Eastern timezone.
- The print statement output will be the date and time in the US/Eastern timezone and in the format used in the U.S.A. That format can be changed as it was manually set.

## Conclusion

Working with dates and times is something that is done a lot in Python (along with other languages). The examples shown are some of the most common tasks that are performed.

There are many other options for working and manipulating date and time data so feel free to look at the documentation in the references section.

In closing, I hope this article was useful and have a nice day!

## References

Documentation for the datetime library:

[https://docs.python.org/3/library/datetime.html](https://docs.python.org/3/library/datetime.html)

Documentation for the pytz timezone library:

[https://pypi.org/project/pytz/](https://pypi.org/project/pytz/)