Для работы с датой и временем в 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 содержат и другие полезные методы, которые Вы можете найти в документации модуля.
Примеры из этой статьи: https://github.com/AllineedRu/PythonExamples/blob/main/ain_date_and_time/__init__.py