Модуль datetime в Python: как работать с датой и временем
Информация о дате в Python — это не отдельный тип данных. Поэтому для выполнения операций с датой и временем используется модуль datetime. Вначале нужно его импортировать — это даст возможность работать с датами как с объектами отдельного типа.
Содержание
- Как вывести подробную текущую дату
- Создание конкретной даты
- Функция strftime()
- Актуальная дата
- Актуальное время
- Создать новую дату
- Определить временной промежуток
- Расстояние между датами
- Сравнение дат
- Операции с часовыми поясами
- Отличия между основными стандартами времени
- Как создать простой aware-объект datetime, учитывающий часовой пояс
Как вывести подробную текущую дату
import datetime #Импорт модуля vremya = datetime.datetime.now() #Вызов метода now из класса datetime print(vremya) #Вывод времени на экран
Этот код отображает сведения о текущем времени и выводит на экран подробную дату вплоть до микросекунд:
2021-09-27 10:59:29.217179
Создание конкретной даты
Для создания конкретной даты используется класс 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 | Название месяца
сокращенно |
Sep |
| %B | Название месяца | September |
| %m | Номер месяца 01-12 | 09 |
| %y | Год, сокращенный вариант | 21 |
| %Y | Год, полностью | 2021 |
| %H | Час 0-23 | 16 |
| %I | Час 0-12 | 04 |
| %p | AM/PM | PM |
| %M | Минуты | 20 |
| %S | Секунды | 25 |
| %f | Микросекунды 000000-999999 | 975971 |
| %z | Отклонение от всемирного координированного времени (UTC) | +0100 |
| %j | Номер дня в году 001-366 | 258 |
| %U | Номер недели в году, начинающаяся с воскресения 00-53 | 37 |
| %W | Номер недели в году, начинающаяся с понедельника
00-53 |
37 |
| %с | Локальное время | Thu Sep 16 04:20:25 2021 |
| %С | Век | 21 |
| %x | Локальная дата | 09/16/21 |
| %X | Локальное время | 04:20:425 |
| %G | ISO 8601 год | 2021 |
| %u | ISO 8601 рабочий день (1-7) | 3 |
| %V | ISO 8601 номер недели (01-53) | 37 |
Актуальная дата
В случае, когда нужно получить и настроить значение актуальной даты, задействуется класс date:
>>> from datetime import date >>> cur = date.today() >>> print(cur)
В консоли отобразится следующий формат даты:
2021-09-16
Актуальное время
Для получения текущего времени нужно вернуть данные про актуальную дату и время, после чего извлечь информацию про время с помощью метода 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 выглядит вот так:
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)
Консоль выведет:
398 days, 0:00:00
Обращаясь к 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.
- DST (day saving time) — летнее время. Летнее время устанавливается на летний период на час вперед относительно текущего стандартного времени. Осенью часы переводят на час назад на так называемое зимнее время. Перевод стрелок выполняется в ночь с субботы на воскресенье. Перевод времени делается с целью экономии ресурсов и из соображений рационального расходования электроэнергии
- UTC — всемирное координированное время. Информация про время в стандарте UTC актуально для всех часовых поясов на планете. Поскольку UTC служит отправной точкой времени при написании кода на Python, мы советуем всегда работать в этом стандарте. Это позволит избежать ошибок из-за разницы в показаниях времени для разных мест.
Как создать простой 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)
Консоль выведет:
2021-09-16 10:36:40.856322+03:00
А вот так высчитывается время в Праге:
import pytz
import datetime
tz_praha = pytz.timezone("Europe/Prague")
dt_praha = datetime.datetime.now(tz_praha)
print(dt_praha)
Результат:
2021-09-16 09:41:02.260775+02:00

Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: