Работа с датой и временем в Python

User Rating: 0 / 5

Для работы с датой и временем в Python используется модуль datetime, который предоставляет соответствующие функции. Поэтому если желаете работать с датой и временем в вашем скрипте/модуле Python, то в секции импортов в начале скрипта подключите модуль datetime при помощи оператора import:

import datetime

Теперь, когда модуль подключен, можно воспользоваться удобными функциями.

Для получения даты без указания времени используется класс date, а для получения даты вместе со временем - класс datetime. Метод today(), доступный в классе date, возвращает текущую дату. Его вызов эквивалентен вызову date.fromtimestamp(time.time()). Также у класса date есть конструктор, принимающий три параметра - год, месяц и день.  Если использовать создание даты при помощи конструктора, то можно создать объект, содержащий требуемую дату. В примере ниже мы создаём дату, соответствующую началу 2022 года - 1 января 2022 г:

if __name__ == '__main__':
    d = datetime.date
    dt = datetime.datetime
    print(f'Текущая дата: {d.today()}')
    print(f'Начало 2022 года: {datetime.date(2022, 1, 1)}')

    print(f'Текущая дата, без формата: {d.today().ctime()}')
    print(f'Текущая дата в формате \'%A, %d %b %Y\': {d.today().strftime("%A, %d %b %Y")}')
    print(f'Текущая дата в формате \'%d.%m.%Y\': {d.today().strftime("%d.%m.%Y")}')
    print(f'Текущая дата в формате \'%c\': {d.today().strftime("%c")}')
    print(f'Текущая дата в формате \'%x\': {d.today().strftime("%x")}')
    print(f'Текущая дата и время в формате \'%d.%m.%Y %H:%M:%S\': {dt.today().strftime("%d.%m.%Y %H:%M:%S")}')
    print(f'Текущее время в формате \'%H:%M:%S\': {dt.today().strftime("%H:%M:%S")}')
    print(f'Текущее время с микросекундами в формате \'%H:%M:%S.%f\': {dt.today().strftime("%H:%M:%S.%f")}')

Чтобы получить строковое представление с текущей датой без указания какого-то специфичного формата используется вызов d.today().ctime(). Если же нам нужно использовать определённый формат вывода частей даты, то используется функция strftime(), принимающая в качестве параметра строку с форматом даты. Полное описание доступных форматов можно найти по этой ссылке, а в примере мы рассмотрели наиболее типовые варианты.

Запустите скрипт и увидите на консоли примерно следующий вывод:

Текущая дата: 2022-05-21
Начало 2022 года: 2022-01-01
Текущая дата, без формата: Sat May 21 00:00:00 2022
Текущая дата в формате '%A, %d %b %Y': Saturday, 21 May 2022
Текущая дата в формате '%d.%m.%Y': 21.05.2022
Текущая дата в формате '%c': Sat May 21 00:00:00 2022
Текущая дата в формате '%x': 05/21/22
Текущая дата и время в формате '%d.%m.%Y %H:%M:%S': 21.05.2022 19:47:07
Текущее время в формате '%H:%M:%S': 19:47:07
Текущее время с микросекундами в формате '%H:%M:%S.%f': 19:47:07.501864

Обратите внимание на директиву формата - %f позволяет выводить микросекунды, директивы %H, %M и %S представляют собой часы, минуты и секунды, соответственно. Директива %x представляет собой дату с настройками текущей локали. Директивы %d, %m и %Y соответствуют дню, месяцу и году. Наконец, директива %c выводит дату и время с настройками текущей локали. Попробуйте использовать также и другие доступные директивы и посмотреть на результат.

Чтобы получить текущий день недели используйте функцию weekday() класса date. Она возвращает для каждого дня недели целочисленное значение от 0 до 6, где 0 - это понедельник, 6 - воскресенье. Ниже показан небольшой пример, как можно вывести на экран название текущего дня недели вместо его целочисленного значения. Для этой цели мы используем небольшой кортеж, содержащий названия дней недели:

    # Вывод текущего дня недели:
    # 0 - Понедельник
    # 1 - Вторник
    # 2 - Среда
    # 3 - Четверг
    # 4 - Пятница
    # 5 - Суббота
    # 6 - Воскресенье
    day = datetime.date(2022, 5, 21).weekday()
    days = ('понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье')
    print(f'День недели, соответствующий 21 мая 2022 года: {days[day]}')

При запуске скрипта на экране консоли будет выведено:

День недели, соответствующий 21 мая 2022 года: суббота

Теперь посмотрим, как можно получить объект даты из строки. Для решения этой задачи нам поможет метод fromisoformat() из класса datetime. Он принимает один строковый параметр, поддерживающий следующий формат даты:

YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]

А вот так можно инициализировать дату из строки:

    date_from_str = dt.fromisoformat("2022-05-21 17:50:31")
    print(f'Дата, полученная из строки: {date_from_str}')
    print(f'Дата, полученная из строки: {date_from_str.strftime("%c")}')

При запуске этого примера на экран будет выведено:

Дата, полученная из строки: 2022-05-21 17:50:31
Дата, полученная из строки: Sat May 21 17:50:31 2022

Классы date и datetime модуля datetime содержат и другие полезные методы, которые Вы можете найти в документации модуля.

Яндекс.Метрика