Модуль datetime в Python: как работать с датой и временем
Информация о дате в Python — это не отдельный тип данных. Поэтому для выполнения операций с датой и временем используется модуль datetime . Вначале нужно его импортировать — это даст возможность работать с датами как с объектами отдельного типа.
Курс Аналітик даних.
Протягом 4 місяців ви вивчите повний набір інструментів для аналізу даних та отримаєте можливість працевлаштування в Laba Group.
Как вывести подробную текущую дату
import datetime #Импорт модуля vremya = datetime.datetime.now() #Вызов метода now из класса datetime print(vremya) #Вывод времени на экран
Этот код отображает сведения о текущем времени и выводит на экран подробную дату вплоть до микросекунд:
Создание конкретной даты
Для создания конкретной даты используется класс datetime() одноименного модуля . Класс datetime() определяется тремя аргументами для создания даты: год, месяц, день. Давайте посмотрим, как это выглядит в коде:
import datetime #Импорт модуля x = datetime.datetime(2020, 5, 17) #Задание даты print(x) #Вывод даты на экран
Освоить язык программирования Python вам могут помочь онлайн курсы от наших партнеров Mate Academy и Powercode. Получите качественный уровень знаний от практикующих специалистов.
Функция strftime()
Функцию strftime() используют для преобразования объектов даты и времени в их строковое представление. Этот значительно упрощает настройку формата времени и даты при выводе на экран.
Курс Микросервисная архитектура.
програма, яка допоможе опанувати головні принципи розробки мікросервісної архітектури, щоби ви могли проєктувати незалежні сервіси, а потім інтегрувати їх в одну систему. Практики буде багато.
Как вывести на экран год и день недели с помощью strftime()
import datetime #Импорт модуля x = datetime.datetime.now() #Вызов метода now из класса datetime print(x.year) #Вывод на экран значения текущего года print(x.strftime("%A")) #Отображение на экране значения текущего дня недели
| Параметр метода strftime() | Описание | Пример |
| %a | День недели сокращенно | Wed |
| %A | День недели | Wednesday |
| %w | Номер дня недели, начиная с Sunday — 0, Monday — 1… | 3 |
| %d | День месяца | 15 |
| %b | Название месяца |
Актуальная дата
В случае, когда нужно получить и настроить значение актуальной даты, задействуется класс date :
>>> from datetime import date >>> cur = date.today() >>> print(cur)
В консоли отобразится следующий формат даты:
Актуальное время
Для получения текущего времени нужно вернуть данные про актуальную дату и время, после чего извлечь информацию про время с помощью метода time :
>>> import datetime >>> current_date_time = datetime.datetime.now() >>> current_time = current_date_time.time() >>> print(current_time)
С помощью атрибутов модуля datetime можно получать разные версии отображения времени. Применим функцию dir() и укажем нужный атрибут:
>>> import datetime >>> attr = dir(datetime) >>> print(attr) ['MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
Если есть необходимость работать со временем как с объектом, применим класс time модуля datetime . Структура класса описывается следующим образом: datetime.time(hour, minutes, seconds) .
import datetime #Импорт модуля datetime timeobj = datetime.time(11,28,45) #Генерируется объект time с параметрами 11 часов 28 минут 45 секунд print(timeobj) # Вывод времени на экран
Создать новую дату
Чтобы создать новую дату, воспользуемся синтаксисом datetime.datetime(year,month,day) :
import datetime # Импорт модуля datetime date_obj = datetime.datetime(2021,11,27) # Создается экземпляр класса даты print(date_obj) # Вывод даты на экран
Определить временной промежуток
Для определения временного промежутка используется атрибут timedelta() . Объект timedelta выглядит вот так:
Це хороший спосіб розвитку вашої кар’єри в IT-індустрії. Після проходження курсу Mate гарантує вам офер мрії.
td_object =timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) td_object datetime.timedelta(0)
Расстояние между датами
Используемые нами аргументы опциональны, по умолчанию они приравниваются нулю. Это целые числа или числа с плавающей запятой. Они могут быть с плюсом или минусом, благодаря чему можно вычислять временной промежуток между двумя значениями:
>>> from datetime import date >>> f = date(2021,11,13) >>> s = date(2020,10,11) >>> delta = f - s >>> print(delta)
Обращаясь к timedelta , можно выполнять разные математические операции. Например, вы можете добавлять дни, минуты, секунды, часы, недели к объекту datetime.date или datetime.datetime :
>>> import datetime >>> now = datetime.datetime.now() >>> now datetime.datetime(2021, 9, 27, 13, 39, 25, 771446) >>> from datetime import timedelta >>> now + timedelta(days=3) datetime.datetime(2021, 9, 30, 13, 39, 25, 771446) >>> now +timedelta(days=-3) datetime.datetime(2021, 9, 24, 13, 39, 25, 771446)
Поскольку аргументы timedelta по умолчанию установлены в ноль, у нас есть возможность использовать их выборочно, что позволяет добавлять, скажем, только минуты:
>>> import datetime >>> now=datetime.datetime.now() >>> now datetime.datetime(2021, 9, 27, 13, 59, 22, 649538) >>> from datetime import timedelta >>> now+timedelta(minutes=3) datetime.datetime(2021, 9, 27, 14, 2, 22, 649538) >>> now+timedelta(minutes=-3) datetime.datetime(2021, 9, 27, 13, 56, 22, 649538)
Сравнение дат
Также можно сравнить даты. Например:
>>>import datetime >>>now = datetime.time(7, 30, 0) >>>next_hour = datetime.time(10, 30, 0) >>>print('now < next_hour:', now < next_hour) >>>today = datetime.date.today() >>>next_week = datetime.date.today() + datetime.timedelta(days=7) >>>print('today > next_week:', today > next_week)
now < next_hour: True today >next_week: False
Операции с часовыми поясами
В Python cуществует два типа данных, содержащих информацию о времени: абсолютные ( naive ) и относительные ( aware ).
Они отличаются тем, что в случае с абсолютными датами ( naive ) информация о временном поясе не учитывается. В случае же с относительными ( aware ) информация про временной пояс передается и также учитывается летнее время. Соответственно, абсолютные данные удобнее для работы.
Отличия между основными стандартами времени
- GMT (Greenwich Mean Time — среднее время по Гринвичу или гринвичское время) — это официальный часовой пояс, используемый в некоторых странах Европы и Африки. Например, местное время для Берлина 2020–10–17 09:40:33.614581+02:00 GMT. Время в Санкт-Петербурге на 3 часа опережает время в GMT.
Курс Англійської.
Вивчай англійську прямо зі свого смартфона за допомоги смарт-платформи.
Как создать простой aware-объект datetime, учитывающий часовой пояс
import datetime dt_now = datetime.datetime.utcnow() print(dt_now)
Один из недостатков библиотеки datetime Python — отсутствие поддержки часовых поясов. В случае, когда нужно учитывать часовой пояс, используется другая библиотека – pytz . В первой строке кода эту библиотеку также нужно импортировать. Предположим, что нам необходимо задать время в столице Кении — Найроби:
import pytz import datetime tz_nairobi = pytz.timezone("Africa/Nairobi") dt_nairobi =datetime.datetime.now(tz_nairobi) print(dt_nairobi)
Модуль time

time.altzone — смещение DST часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно.
time.asctime([t]) — преобразовывает кортеж или struct_time в строку вида «Thu Sep 27 16:42:37 2012». Если аргумент не указан, используется текущее время.
time.clock() — в Unix, возвращает текущее время. В Windows, возвращает время, прошедшее с момента первого вызова данной функции.
time.ctime([сек]) — преобразует время, выраженное в секундах с начала эпохи в строку вида «Thu Sep 27 16:42:37 2012».
time.daylight — не 0, если определено, зимнее время или летнее (DST).
time.gmtime([сек]) — преобразует время, выраженное в секундах с начала эпохи в struct_time, где DST флаг всегда равен нулю.
time.localtime([сек]) — как gmtime, но с DST флагом.
time.mktime(t) — преобразует кортеж или struct_time в число секунд с начала эпохи. Обратна функции time.localtime.
time.sleep(сек) — приостановить выполнение программы на заданное количество секунд.
time.strftime(формат, [t]) — преобразует кортеж или struct_time в строку по формату:
| Формат | Значение |
|---|---|
| %a | Сокращенное название дня недели |
| %A | Полное название дня недели |
| %b | Сокращенное название месяца |
| %B | Полное название месяца |
| %c | Дата и время |
| %d | День месяца [01,31] |
| %H | Час (24-часовой формат) [00,23] |
| %I | Час (12-часовой формат) [01,12] |
| %j | День года [001,366] |
| %m | Номер месяца [01,12] |
| %M | Число минут [00,59] |
| %p | До полудня или после (при 12-часовом формате) |
| %S | Число секунд [00,61] |
| %U | Номер недели в году (нулевая неделя начинается с воскресенья) [00,53] |
| %w | Номер дня недели [0(Sunday),6] |
| %W | Номер недели в году (нулевая неделя начинается с понедельника) [00,53] |
| %x | Дата |
| %X | Время |
| %y | Год без века [00,99] |
| %Y | Год с веком |
| %Z | Временная зона |
| %% | Знак ‘%’ |
time.strptime(строка [, формат]) — разбор строки, представляющей время в соответствии с форматом. Возвращаемое значение struct_time. Формат по умолчанию: «%a %b %d %H:%M:%S %Y».
Класс time.struct_time — тип последовательности значения времени. Имеет интерфейс кортежа. Можно обращаться по индексу или по имени.
- tm_year
- tm_mon
- tm_mday
- tm_hour
- tm_min
- tm_sec
- tm_wday
- tm_yday
- tm_isdst
time.time() — время, выраженное в секундах с начала эпохи.
time.timezone — смещение местного часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно.
time.tzname — кортеж из двух строк: первая — имя DST часового пояса, второй — имя местного часового пояса.
Для вставки кода на Python в комментарий заключайте его в теги
Get the Current Time in Python

- Use the datetime Module to Get the Current Time in Python
- Use the time Module to Get the Current Time in Python
We could use two modules to get the current time in Python, that are datetime and time .
Use the datetime Module to Get the Current Time in Python
>>> from datetime import datetime >>> datetime.now() datetime.datetime(2018, 7, 17, 22, 48, 16, 222169)
It returns the datetime object that includes the date time information including year, month, day and time.
If you prefer a string format, then you could use a strftime method to convert the datetime object instance to a string format as defined in the argument.
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S') '2018-07-17 22:54:25'
Below is the snippet of directives in the strftime format string.
| Directive | Meaning |
|---|---|
| %d | Day of the month as a decimal number [01,31]. |
| %H | Hour (24-hour clock) as a decimal number [00,23]. |
| %m | Month as a decimal number [01,12]. |
| %M | Minute as a decimal number [00,59]. |
| %S | Second as a decimal number [00,61]. |
| %Y | Year with century as a decimal number. |
Only Current Time Without Date
>>> from datetime import datetime >>> datetime.now().time() datetime.time(23, 4, 0, 13713)
Use the time Module to Get the Current Time in Python
time.strftime to Get the Current Time in Python
import time time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
"2018-07-17 21:06:40"
As its name indicates, time.localtime() returns the local time in your time zone. If UTC time is preferred, then time.gmtime() is the right choice.
time.ctime to Get the Current Time in Python
import time time.ctime()
"Tue Oct 29 11:21:51 2019"
The result is that ctime is more display-friendly to display in the GUI or print in the console. It could aslo be splitted to get the weekday, month, day, time and year.
>>> import time >>> A = time.ctime() >>> A = A.split() >>> A ['Tue', 'Oct', '29', '12:38:44', '2019']
Be aware that time.ctime() is operation system dependent, or in other words, it could change if the OS is different. Don’t expect it to be standard among different operation systems.
This method is not good for record-keeping.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
Related Article - Python DateTime
- Convert Pandas Column to Datetime
- Get the Day of the Week in Python
- Convert String to Datetime in Python
- Find the Last Day of the Month Using Python
- Determine Leap Year in Python
Как правильно вывести текущее время в окне tkinter?
Задача в том, чтобы в окне создать Label, в котором будет динамически обновляться текущее время в формате hh:mm:ss. У меня получается вывести время, но оно не обновляется, а показывает только время, которое совпадает с запуском скрипта. Вот то, что пока что есть:
root = tkinter.Tk() root.geometry('400x150+<>+<>'.format(500, 400)) a = Label(root, text=f"", font=("helvetica", 15)) a.pack() root.mainloop()
Отслеживать
задан 1 июл 2021 в 11:08
556 1 1 золотой знак 4 4 серебряных знака 21 21 бронзовый знак
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
f-строка формируется только один раз, а не перезапускает прописанные в ней функции. Нужно принудительно обновлять текст периодически.
import tkinter as tk from datetime import datetime def update_time(): label.config(text=f"") root.after(100, update_time) # Запланировать выполнение этой же функции через 100 миллисекунд root = tk.Tk() root.geometry('400x150+<>+<>'.format(500, 400)) label = tk.Label(root, font=("helvetica", 15)) label.pack() update_time() root.mainloop()
