How to use Python to calculate time
I want to write python script that acts as a time calculator.
Suppose the time is now 13:05:00
I want to add 1 hour, 23 minutes, and 10 seconds to it.
and I want to print the answer out.
How do I do this in Python?
What if date is also involved?
![]()
5 Answers 5
datetime.timedelta is designed for fixed time differences (e.g. 1 day is fixed, 1 month is not).
Note that it doesn’t make sense to do addition on just a time (but you can combine a date and a time into a datetime object, use that, and then get the time). DST is the major culprit. For example, 12:01am + 5 hours could be 4:01am, 5:01am, or 6:01am on different days.
For calculating dates and times there are several options but I will write the simple way:
Нахождение длительности временных интервалов в Python
Python-программисту, при работе со значениями, представляющими дату и время, часто нужно вычислять длительность временных интервалов. Из этого материала вы узнаете о том, как находить разницу между двумя временными метками, выраженную в часах, минутах и секундах.

А именно, здесь мы коснёмся следующих вопросов:
- Как пользоваться Python-модулем datetime для работы с датой и временем.
- Что собой представляют объекты timedelta и что они могут дать программисту.
- Как вычислять продолжительность временных интервалов, выражая результат в разных единицах измерения.
Python-модуль datetime
Для работы с датой и временем в Python используется модуль datetime . Он является частью стандартной библиотеки Python. Для того чтобы применить этот модуль в своём проекте — достаточно его импортировать:
Для вычисления продолжительности временного интервала нужно создать две различных отметки времени. Тут есть несколько вариантов:
- Два объекта date — стандартное представление даты.
- Два объекта time — стандартное представление времени.
- Два объекта datetime , комбинирующие сведения, которые обычно хранятся в объектах date и time .
Создание объектов date
Импортируем класс date из модуля datetime . Для того чтобы создать в Python объект date — можно воспользоваться обычной синтаксической конструкцией вида datetime.date(<year>,<month>,<day>) . Вот пример создания объекта date с именем date1 :
Этот код можно попробовать запустить в онлайн-интерпретаторе Python на Geekflare. Ещё можно установить Python у себя.
Из предыдущего примера видно, что дата выводится в формате YYYY-MM-DD .
Обратите внимание на то, что при создании объекта date месяц надо задавать с использованием целого числа, в начале которого нет дополнительных нулей. Обычно в числовой записи месяцев соответствующие числа дополняют нулями. Здесь же, например, чтобы указать Июнь, то есть — 6 месяц — нужно воспользоваться числом 6, а не 06.
Попробуйте запустить следующий фрагмент кода. Тут месяц намеренно записан неправильно — 03 вместо 3. Из-за этого возникает ошибка SyntaxError :
Поговорим теперь о том, как создавать объекты time .
Создание объектов time
Для создания объектов time импортируем класс time . При создании таких объектов указывают следующие атрибуты класса: hour , minute , second и microsecond . Они, соответственно, позволяют указывать часы, минуты, секунды и микросекунды.
Правда, все эти атрибуты являются необязательными. Если какой-то из них опустить, предположим — second , то он, по умолчанию, будет установлен в 0.
В следующем примере показано создание объекта time с именем time1 . Так же, как и при работе с объектами date , объекты time можно выводить в консоль:
Создание объектов datetime
Как видите, объекты типа date не содержат сведений о времени. А в объектах time нет информации о дате.
Но на практике обычно нужны данные и о дате, и о времени. Поэтому вместо двух вышеописанных классов рекомендуется прибегнуть к классу datetime .
Обратиться к этому классу и создать соответствующий объект ( dt1 ) можно так:
Создадим ещё один объект datetime и дадим ему имя dt2 , опустив при его создании атрибут second . Это приведёт к тому, что он будет установлен в значение по умолчанию — 0.
Итак, теперь вы знаете о том, как создавать Python-объекты date , time и datetime , представляющие отметки времени. Пришло время поговорить о том, как находить длительность временных интервалов.
Применение объектов timedelta
В Python объекты timedelta представляют собой сведения о промежутках времени. Это — разница двух объектов date , time или datetime .
Если сложить или вычесть два объекта date , time или datetime , получится объект timedelta . У этого объекта имеются полезные атрибуты и методы, которые могут помочь в деле нахождения длительности временных интервалов.
Посчитаем длительность интервала, задаваемого двумя объектами типа datetime — dt1 и dt2 :
Видно, что переменная tdelta хранит разницу между dt1 и dt2 . Тут, кроме того, пользуясь встроенной Python-функцией type() , мы проверили тип tdelta . Это — timedelta .
Проведём ещё один эксперимент.
Нахождение временного промежутка между двумя датами
Рассмотрим простой, но интересный пример.
Задача заключается в том, чтобы получить временную разницу между текущей датой (сегодняшним днём) и днём вашего рождения.
Для того чтобы её решить — надо сформировать первую отметку времени, указывающую на сегодняшний день, и вторую, указывающую на дату дня рождения.
Создадим пару объектов datetime :
- Первый будет хранить сегодняшнюю дату, мы назовём его today .
- Второй будет хранить дату дня рождения. Назовём его bday .
Пробуя следующий код, замените значение, попадающее в bday , на дату своего дня рождения текущего года. Это позволит узнать о том, сколько времени вам ещё его ждать в этом году.
Если же ваш день рождения в этом году уже прошёл, можете записать в bday дату из следующего года.
Следующий шаг нашей работы — нахождение разницы между двумя отметками времени. Её мы будем хранить в переменной time_diff . Подобные переменные, как мы уже говорили, имеют тип timedelta . Нам достаточно вычесть today из bday .
Для того чтобы узнать о том, сколько полных дней осталось до дня рождения, можно воспользоваться атрибутом days объекта типа timedelta .
Выражение длительности временных промежутков в секундах
Теперь узнаем о том, сколько ждать дня рождения, выразив результат в секундах.
Для этого можно воспользоваться методом total_seconds() объекта типа timedelta . В следующем примере это — всё тот же объект time_diff .
Да, дня рождения придётся подождать!
Теперь вы знаете о том, как вычислять промежутки времени и выражать их в секундах.
Давайте вспомним то, что мы знаем о времени, и поговорим об измерении времени в днях, часах, минутах и секундах. В сутках 24 часа, в часе 60 минут, а 60 секунд — это минута.

Часы, минуты и секунды
Для перехода от секунд к минутам, дням или часам, можно воспользоваться следующей таблицей, деля значение в секундах на соответствующий коэффициент преобразования.
| Из | В | Делим на |
| Секунд | Минуты | 60 |
| Секунд | Часы | 60*60 |
| Секунд | Дни | 60*60*24 |
Воспользуемся этими знаниями.
Выражение длительности временных промежутков в минутах
Для того чтобы, имея данные о длительности промежутка времени, выраженные в секундах, узнать его длительность в минутах, нужно разделить общее число секунд на 60.
Разделим то, что хранится в переменной tsecs , на 60, и сохраним то, что получится, в переменной tmins :
Выражение длительности временных промежутков в часах
Теперь посчитаем длительность временного промежутка, выраженную в часах. Учитывая то, что у нас уже есть значение, выраженное в минутах, для достижения этой цели его можно просто поделить на 60. Или можно поделить значение, выраженное в секундах, на 3600 (60*60).
Теперь вы знаете о том, как представлять разные промежутки времени в нужном вам виде.
Working with Time and Date in Python
![]()
One of the things I have to do quite often is to deal with various forms of data that includes time. I think that it is beneficial for everyone to understand how to manipulate this information as sometimes it is mandatory to do changes to your time or date format. For example, you might be analyzing time series data from temperature or humidity sensor, or you might be looking at some company sales report information, or you are taking notes on your personal expenses. Use case actually does not matter, you will always have to deal with time and date to represent information correctly which happened at some point in time. So in this article I am going to share some most common operations on time and date manipulation which you can do in Python.
Get current Time and Date
To start working with Time and Date in python, you need to import datetime module into your code:
Now, you can easily get current time and date
During the time of running this example, I received a response provided below:
Output:
As you can see, returned response has a format of Year-Month-Day Hours:Minutes:Seconds.Milliseconds. It is important to note that now() method returns a time local date and time, so that totally depends on your location. Also, you can pass a timezone parameter to now() method, so you can receive time and date in UTC, for example.
Output:
So as you can see in my case, UTC time is 3 hours less than my local time.
Most of the time you don’t need to have millisecond information, so you can just drop using split() method. Important to note is that object returned by datetime.datetime.now() is a datetime class, so you have to convert it to a string if you want to apply split().
During the time of running this example, I received a response provided below.
Output:
The reason why you need [0] in the code example above is because after applying, split(), the response will be a list of string objects. As in this case, the result was as provided below.
Output:
So we only need the first element from this list.
Retrieving separate data fields
Now using the same current_time object, we can retrieve various fields separately. I think the code below is self explanatory. Note that result printed is using python f-string, which requires some string formatting to show result nicely. Code example is provided below.
Output:
Working with timestamp
Another thing which you can encounter is Unix timestamp. You can also hear a few different names for that, one quite common is Posix timestamp, but that actually means the same. It is quite common in IoT industry for various devices to send timestamp information to servers instead of pure date and time as it takes less space. So Unix timestamp is simply the number of seconds passed since 00:00:00 UTC, January 1st, 1970. Knowing this is enough to deal with timestamps in Python.
So for example, you want to convert 2021–09–10 16:54:23 UTC time to a timestamp?
Output:
Now if you want to do the conversion to time and date, you can do that by using fromtimestamp() method:
Output:
As you can see it is quite straightforward to work with timestamps using datetime module.
There is actually a cool website which I use a lot when I am dealing with timestamps. You can convert time and date to a timestamp and vice versa and do a few more things. You can always double check if your calculations are correct: https://www.epochconverter.com/
Calculating time difference
Another quite common thing to is to find out what was the date and time in the past (or what will be in the future) if we substract or add some sort of value to our time object. That is were timedelta() method comes into action. So lets say, you have a certain date, for example 2021–08–10 17:45:00 and you want to know, what date and time would be in the future or was in the past if you add or substract certain amount of days, hours etc. The following code example demonstrates how it is done.
Output:
strptime() method is used to create a datetime object from string which holds time and date information, start_time_and_date in this case.
So you can do it like this if you want to know the exact date and time, but what if you want to know the difference, lets say in days/hours/minutes seconds between two dates, or timestamps? This can also be achieved. Lets take results from previous example and find what is the difference between 2021–08–12 21:07:00 and 2021–08–06 15:32:00
Output:
As you can see, we have easily calculated difference between two datetime objects.
Understanding strftime() and strptime() methods
Last thing I want to talk about here are these two methods. They are provided within datetime module and their use is to conveniently convert datetime objects to strings and vice versa. Now I am not going to dive deeply in all formatting possibilities, but they are described really good in python documentation, which can you find in the article below:
datetime — Basic date and time types — Python 3.9.7 documentation
Only one concrete class, the class, is supplied by the module. The class can represent simple timezones with fixed…
Anyway, I will show you a few examples. So suppose you need to create a datetime object having a date string. Now these strings can have various formats, and that is why you need a formatting string, so that datetime module could parse correctly your input. Below example illustrates the usage of strptime() method
Output:
As you can see from the example, output is identical in all cases. That is because we supplied exact format of our date and time string to strptime().
Now we can reverse this and use the same logic with strftime() which will allow us to get a string from datetime object. For better visual understanding, I will use the same 2021–08–06 16:00:00 value
Output:
There are other formatting options which you can look for in the documentation link which I have provided above, but I hope you that you should be able to get the idea how these two methods work and how and when you should use them.
Conclusion
Working with Time and Date is a very common task in python. This tutorial shows the basics you need to understand how to use datetime module in python to make your life easier when working with timeseries data on your day to day tasks.
I have uploaded all examples used here to my github repository. One thing I would like to mention that actually this module is called datetime. But the class used is also called datetime. That is why in the code you will see
What this allows to do is to access datetime class methods more conveniently, so for example instead of current_time = datetime.datetime.now() you can write current_time = datetime.now()
Hope that is not too confusing, but I will be happy to answer the questions if you have any.
# Работа со временем
Для работы со временем в Python импортируют библиотеку datetime (англ. date «дата», time «время»). В ней есть не только отдельные функции, но и целый новый тип данных.
Называется он точно так же, как библиотека — datetime . Чтобы не путаться, будем подключать библиотеку под именем dt и так всегда к ней обращаться.
Тип данных datetime похож на уже привычные вам int , string и dict . Он нужен, чтобы хранить информацию о конкретном моменте времени: год, месяц, день, час, минуты, секунды и микросекунды.
Чтобы создать объект этого типа, нужно вызвать функцию datetime() из библиотеки dt . Она принимает обязательные аргументы — год, месяц и день, — и необязательные: час, минута, секунда и микросекунда, которые по умолчанию равны нулю.
Создадим объект типа datetime с датой и временем старта Гагарина:
Тип данных datetime позволяет просто вычитать даты друг из друга, как обычные числа. Вот время между стартом Гагарина и его приземлением:
# Упражнения
- Научите Виту сообщать пользователю, сколько времени шёл его любимый сериал.
- Дата выхода первой серии — 17 апреля 2011 года.
- Дата выхода последней серии — 15 апреля 2019 года.
- Напишите код, отвечающий на запрос пользователя "Сколько времени у меня уже ушло на этот курс по разработке?" Вспомните, в какой день и во сколько вы начали проходить курс. Запишите этот момент времени в переменную start_moment . В переменную current_moment запишите текущий момент времени. Затем вычислите разницу двух этих моментов, запишите её в переменную total_time , и напечатайте её на экране.
# Стандарт UTC
Есть несколько стандартов измерения и записи времени. Раньше в основном придерживались GMT (англ. «Greenwich Mean Time», среднее время по гринвичскому меридиану). Позже прежний всемирный формат был отменен и приняли новый, определяемый атомными часами. Это UTC — «coordinated universal time» — всемирное координированное время.
У каждой переменной типа данных datetime можно вызвать метод utcnow() (англ. now «сейчас»). Он вернёт текущий момент времени по UTC с эталонной точностью до микросекунд.
Более того, метод utcnow() настолько хитрый, что для его вызова необязательно явно создавать объект типа datetime . Можно просто написать:
Для получения времени другого часового пояса, есть тип timedelta (от англ. delta, «промежуток»), в котором можно сохранить определенный промежуток времени. Этот тип тоже живёт в библиотеке dt. А объект такого типа создаётся функцией timedelta() :
И прибавляем его к значению времени по UTC:
В аргументах функции timedelta() среди прочего можно указывать days (дни), hours (часы), minutes (минуты), seconds (секунды), microseconds (микросекунды).
Пример: Победитель Гран-при Австралии чемпионата мира Формулы-1 2019 года, Вале Боттас проехал свой самый быстрый круг за 1 минуту 25 секунд и 273250 микросекунд. Второй результат показал Льюис Хэмилтон с разницей в 208860 микросекунд. Вычислим время самого быстрого круга Хэмилтона.
# Упражнения
- Напишите функцию, которая по названию города скажет, сколько там сейчас времени. В словарь UTC_OFFSET (англ. offset, «сдвиг»), для каждого города записана разница местного времени и UTC в часах.
Подключите метод перебора и выведите фразу для каждого города: "В Уфе 5 часов." Используйте проверку для правильно подобранного окончания слова "часы" в зависимости от числа.
Напишите функцию, которая по имени друга скажет, сколько у него сейчас времени. В словаре DATABASE хранятся данные о том, кто из друзей где живёт.
- Подключите метод перебора друзей и выведите фразу для каждого друга: "У Димы сейчас 15 часов." Используйте проверку для правильно подобранного окончания слова "часы" в зависимости от числа.
# Форматирование времени
До сих пор вы печатали время только в одном формате.
Что делать, если хочется напечатать сообщение по-человечески, скажем: "Сейчас 10:31"? Для этого существует метод strftime() (от англ. string format time, «строковый формат времени»). Его можно применить к любому объекту типа datetime и аргументом задать формат вывода времени:
Здесь %H означает часы, %M — минуты. Кроме этих параметров, бывают ещё, например %B — месяц, %Y — год и %S — секунды, %A — название дня недели по-английски, %U — номер недели в году.
# Упражнения
- Сделайте так, чтобы функция what_time() возвращала время в формате часы:минуты .
- Примените все полученные в этой теме знания, чтобы научить Виту отвечать на вопросы про друзей, сколько у них сейчас времени:
- Артём, который час?
- Антон, который час?
Примеры таких запросов уже добавлены в список queries в функции runner() .