Задачи на дату и время в Python с решениями
Задачи на дату и время в Python помогают закрепить работу с модулем datetime: разбор строк, арифметику дат через timedelta, форматирование и часовые пояса. Ниже 30 упражнений с готовым кодом, от подсчета дней до праздника до проверки пересечения встреч. Перед практикой посмотрите короткую шпаргалку по классам и кодам формата, она пригодится почти в каждом решении.
Язык программирования Python предоставляет мощные инструменты для работы с датой и временем. В этой статье мы рассмотрим основные возможности, которые предоставляет Python для работы с датами и временем.

Содержание статьи
- Модуль datetime
- Задача 1: Подсчет количества дней до определенной даты
- Решение задачи
- Задача 2: Форматирование времени в определенный формат
- Решение задачи 2
- Задача 3: Перевод времени из одного часового пояса в другой
- Решение задачи 3
- Задача 4: Определение дня недели для определенной даты
- Решение задачи 4
- Задача 5: Подсчет времени выполнения кода
- Решение задачи 5
- Задача 6: Создание таймера обратного отсчета
- Решение задачи 6
- Задача 7: Поиск разницы между двумя датами
- Решение задачи 7
- Задача 8: Генерация списка дат в определенном диапазоне
- Решение задачи 8
- Задача 9: Проверка на високосный год
- Решение задачи 9
- Задача 10: Вычисление возраста по дате рождения
- Решение задачи 10
- Задача 11: Поиск следующего рабочего дня
- Решение задачи 11
- Задача 12: Подсчет количества рабочих дней между двумя датами
- Решение задачи 12
- Задача 13: Подсчет времени выполнения функции
- Решение задачи 13
- Задача 14: Определение количества дней до следующего дня рождения
- Решение задачи 14
- Задача 15: Проверка пересечения двух периодов времени
- Решение задачи 15
- Задача 16: Подсчет времени работы над проектом
- Решение задачи 16
- Задача 17: Определение даты через определенное количество рабочих дней
- Решение задачи 17
- Задача 18: Вычисление времени окончания операции
- Решение задачи 18
- Задача 19: Подсчет количества рабочих часов
- Решение задачи 19
- Задача 20: Проверка наличия свободного времени
- Решение задачи 20
- Задача 21: Подсчет времени до ближайшего праздника
- Решение задачи 21
- Задача 22: Подсчет времени, проведенного на уроках
- Решение задачи 22
- Задача 23: Проверка пересечения двух периодов времени
- Решение задачи 23
- Задача 24: Определение часового пояса
- Решение задачи 24
- Задача 25: Расчет времени выполнения задачи
- Решение задачи 25
- Задача 26: Проверка момента времени
- Решение задачи 26
- Задача 27: Подсчет количества выходных дней в периоде
- Решение задачи 27
- Задача 28: Расчет возраста по дате рождения
- Решение задачи 28
- Задача 29: Определение дня недели
- Решение задачи 29
- Задача 30: Подсчет количества дней до ближайшего дня рождения
- Решение задачи 30
- Шпаргалка по классам и форматам datetime
- Дополнительные задачи
- Частые вопросы
Модуль datetime
В Python для работы с датой и временем используется модуль datetime. Этот модуль позволяет создавать объекты для представления даты, времени и даты-времени, а также проводить операции над этими объектами.
Ниже представлен список практических задач Python Дата Время. Решение практических задач позволит закрепить вам теоретические знания на практике.
Задача 1: Подсчет количества дней до определенной даты
Необходимо написать программу, которая будет принимать на вход текущую дату и дату, до которой нужно посчитать количество дней. Затем программа должна выводить ответ в виде числа дней до указанной даты.
Решение задачи
from datetime import datetime
def days_until(target_date):
current_date = datetime.now().date()
target_date = datetime.strptime(target_date, '%Y-%m-%d').date()
days_left = (target_date - current_date).days
return days_left
target_date = '2030-01-01'
print(f"До {target_date} осталось {days_until(target_date)} дней.")
Задача 2: Форматирование времени в определенный формат
Вам необходимо создать функцию, которая принимает время в формате ЧЧ:ММ:СС и возвращает его в формате Часы AM/PM: Минуты.
Решение задачи 2
from datetime import datetime
def format_time(input_time):
time_obj = datetime.strptime(input_time, '%H:%M:%S').time()
formatted_time = time_obj.strftime('%I:%M %p')
return formatted_time
input_time = '13:45:30'
print(f"Отформатированное время: {format_time(input_time)}")
Задача 3: Перевод времени из одного часового пояса в другой
Напишите программу, которая позволит пользователю ввести время и указать текущий и желаемый часовой пояс для перевода времени.
Решение задачи 3
from zoneinfo import ZoneInfo
from datetime import datetime
def convert_timezone(input_time, current_timezone, desired_timezone):
current_tz = ZoneInfo(current_timezone)
desired_tz = ZoneInfo(desired_timezone)
time_obj = datetime.strptime(input_time, '%H:%M:%S')
time_obj = datetime.combine(datetime.now().date(), time_obj.time())
current_time = time_obj.replace(tzinfo=current_tz)
desired_time = current_time.astimezone(desired_tz)
return desired_time.time()
input_time = '10:30:00'
current_timezone = 'America/New_York'
desired_timezone = 'Asia/Tokyo'
print(f"Переведенное время: {convert_timezone(input_time, current_timezone, desired_timezone)}")
Задача 4: Определение дня недели для определенной даты
Напишите программу, которая запрашивает у пользователя ввод даты в формате гггг-мм-дд и выводит соответствующий день недели.
Решение задачи 4
from datetime import datetime
def get_weekday(input_date):
input_date = datetime.strptime(input_date, '%Y-%m-%d').date()
weekdays = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
return weekdays[input_date.weekday()]
input_date = '2022-10-15'
print(f"День недели для {input_date}: {get_weekday(input_date)}")
Задача 5: Подсчет времени выполнения кода
Необходимо написать функцию-декоратор для измерения времени выполнения других функций.
Решение задачи 5
import time
def measure_time(func):
def wrapper(*args, **kwargs):
start_time = time.perf_counter()
result = func(*args, **kwargs)
end_time = time.perf_counter()
print(f"Время выполнения {func.__name__}: {end_time - start_time} секунд")
return result
return wrapper
@measure_time
def example_function():
time.sleep(2)
example_function()
Задача 6: Создание таймера обратного отсчета
Напишите программу для создания таймера обратного отсчета, который принимает количество секунд и выводит обновляющееся время до завершения отсчета.
Решение задачи 6
import time
def countdown_timer(seconds):
while seconds > 0:
print(f"Осталось времени: {seconds} секунд")
time.sleep(1)
seconds -= 1
print("Отсчет завершен!")
countdown_timer(10)
Задача 7: Поиск разницы между двумя датами
Напишите функцию, которая принимает на вход две даты и вычисляет разницу между ними в днях, часах и минутах.
Решение задачи 7
from datetime import datetime, timedelta
def time_diff(start_date, end_date):
start = datetime.strptime(start_date, '%Y-%m-%d %H:%M:%S')
end = datetime.strptime(end_date, '%Y-%m-%d %H:%M:%S')
time_difference = end - start
days_diff = time_difference.days
hours_diff = time_difference.seconds // 3600
minutes_diff = (time_difference.seconds // 60) % 60
return days_diff, hours_diff, minutes_diff
start_date = '2022-01-01 12:00:00'
end_date = '2022-01-10 18:30:00'
days, hours, minutes = time_diff(start_date, end_date)
print(f"Разница между датами: {days} дней, {hours} часов, {minutes} минут")
Задача 8: Генерация списка дат в определенном диапазоне
Напишите функцию, которая принимает начальную и конечную даты, а затем генерирует список дат в этом диапазоне с определенным шагом.
Решение задачи 8
from datetime import datetime, timedelta
def date_range(start_date, end_date, step):
dates_list = []
current_date = datetime.strptime(start_date, '%Y-%m-%d')
end = datetime.strptime(end_date, '%Y-%m-%d')
while current_date <= end:
dates_list.append(current_date.strftime('%Y-%m-%d'))
current_date += timedelta(days=step)
return dates_list
start_date = '2022-01-01'
end_date = '2022-01-15'
step = 3
print(f"Список дат: {date_range(start_date, end_date, step)}")
Задача 9: Проверка на високосный год
Напишите функцию, которая принимает год в качестве аргумента и проверяет, является ли он високосным.
Решение задачи 9
def is_leap_year(year):
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
return True
else:
return False
year = 2024
if is_leap_year(year):
print(f"{year} год является високосным.")
else:
print(f"{year} год не является високосным.")
Задача 10: Вычисление возраста по дате рождения
Напишите программу, которая запрашивает у пользователя дату его рождения и затем вычисляет и выводит его текущий возраст.
Решение задачи 10
from datetime import datetime
def calculate_age(birth_date):
birth_date = datetime.strptime(birth_date, '%Y-%m-%d')
current_date = datetime.now()
age = current_date.year - birth_date.year - ((current_date.month, current_date.day) < (birth_date.month, birth_date.day))
return age
user_birth_date = '1990-05-15'
print(f"Ваш текущий возраст: {calculate_age(user_birth_date)} лет")
Задача 11: Поиск следующего рабочего дня
Напишите функцию, которая принимает текущую дату и возвращает следующий рабочий день (понедельник-пятница). Если текущий день пятница, то вернуть понедельник следующей недели.
Решение задачи 11
from datetime import datetime, timedelta
def next_business_day(current_date):
current_date = datetime.strptime(current_date, '%Y-%m-%d')
one_day = timedelta(days=1)
while True:
current_date += one_day
if current_date.weekday() < 5: # Проверка на будний день (0-4 - понедельник-пятница)
return current_date.strftime('%Y-%m-%d')
user_current_date = '2022-10-15'
print(f"Следующий рабочий день: {next_business_day(user_current_date)}")
Задача 12: Подсчет количества рабочих дней между двумя датами
Напишите функцию, которая принимает начальную и конечную даты и возвращает количество рабочих дней между ними (исключая выходные).
Решение задачи 12
from datetime import datetime, timedelta
def count_business_days(start_date, end_date):
start = datetime.strptime(start_date, '%Y-%m-%d')
end = datetime.strptime(end_date, '%Y-%m-%d')
one_day = timedelta(days=1)
business_days = 0
while start <= end:
if start.weekday() < 5: # Проверка на будний день (0-4 - понедельник-пятница)
business_days += 1
start += one_day
return business_days
start_date = '2022-10-01'
end_date = '2022-10-15'
print(f"Количество рабочих дней между датами: {count_business_days(start_date, end_date)}")
Задача 13: Подсчет времени выполнения функции
Напишите функцию-декоратор, которая измеряет время выполнения других функций и выводит результат.
Решение задачи 13
import time
def measure_execution_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Время выполнения функции {func.__name__}: {end_time - start_time} секунд")
return result
return wrapper
@measure_execution_time
def example_function():
time.sleep(2)
example_function()
Задача 14: Определение количества дней до следующего дня рождения
Напишите программу, которая запрашивает у пользователя его день рождения и затем выводит количество дней до его следующего дня рождения.
Решение задачи 14
from datetime import datetime, timedelta
def days_until_birthday(birth_date):
today = datetime.now().date()
next_birthday = birth_date.replace(year=today.year)
if next_birthday < today:
next_birthday = next_birthday.replace(year=today.year + 1)
days_left = (next_birthday - today).days
return days_left
user_birth_date = datetime.strptime('1990-05-15', '%Y-%m-%d').date()
print(f"До вашего следующего дня рождения осталось {days_until_birthday(user_birth_date)} дней")
Задача 15: Проверка пересечения двух периодов времени
Напишите функцию, которая принимает на вход два периода времени и проверяет, есть ли у них хотя бы одна общая дата.
Решение задачи 15
from datetime import datetime
def check_time_periods_overlap(start1, end1, start2, end2):
if start1 <= end2 and start2 <= end1:
return True
else:
return False
start1 = datetime(2023, 1, 1)
end1 = datetime(2023, 1, 15)
start2 = datetime(2023, 1, 10)
end2 = datetime(2023, 1, 20)
print(f"Пересекаются ли периоды времени: {check_time_periods_overlap(start1, end1, start2, end2)}")
Задача 16: Подсчет времени работы над проектом
Напишите программу для учета времени работы над проектом. Программа должна записывать время начала и окончания работы над проектом, а затем выводить общее затраченное время.
Решение задачи 16
from datetime import datetime
start_time = datetime.now()
# Здесь выполняется работа над проектом
end_time = datetime.now()
total_time = end_time - start_time
print(f"Общее затраченное время: {total_time}")
Задача 17: Определение даты через определенное количество рабочих дней
Напишите программу, которая принимает текущую дату и количество рабочих дней, а затем определяет дату, наступающую через указанное количество рабочих дней.
Решение задачи 17
from datetime import datetime, timedelta
def next_business_day(current_date, business_days):
current_date = datetime.strptime(current_date, '%Y-%m-%d')
one_day = timedelta(days=1)
while business_days > 0:
current_date += one_day
if current_date.weekday() < 5: # Проверка на будний день (0-4 - понедельник-пятница)
business_days -= 1
return current_date.strftime('%Y-%m-%d')
user_current_date = '2022-10-15'
business_days = 10
print(f"Дата через {business_days} рабочих дней: {next_business_day(user_current_date, business_days)}")
Задача 18: Вычисление времени окончания операции
Напишите функцию, которая принимает время начала операции и ожидаемое время выполнения в минутах, а затем вычисляет время окончания операции.
Решение задачи 18
from datetime import datetime, timedelta
def calculate_end_time(start_time, minutes_to_complete):
start_time = datetime.strptime(start_time, '%H:%M')
end_time = start_time + timedelta(minutes=minutes_to_complete)
return end_time.strftime('%H:%M')
operation_start = '12:00'
expected_duration_minutes = 90
print(f"Ожидаемое время окончания операции: {calculate_end_time(operation_start, expected_duration_minutes)}")
Задача 19: Подсчет количества рабочих часов
Напишите программу, которая принимает начальное и конечное время работы над проектом (в формате ЧЧ:ММ) и вычисляет общее количество отработанных рабочих часов.
Решение задачи 19
from datetime import datetime
def calculate_working_hours(start_time, end_time):
start = datetime.strptime(start_time, '%H:%M')
end = datetime.strptime(end_time, '%H:%M')
working_hours = (end - start).seconds / 3600
return working_hours
start_time = '09:00'
end_time = '17:30'
print(f"Общее количество рабочих часов: {calculate_working_hours(start_time, end_time)} часов")
Задача 20: Проверка наличия свободного времени
Напишите функцию, которая принимает список запланированных встреч (время начала и конца) и новую встречу. Функция должна определить, есть ли у пользователя свободное время между встречами для новой встречи.
Решение задачи 20
from datetime import datetime, timedelta
def check_free_time(schedule, new_meeting):
schedule.sort(key=lambda x: datetime.strptime(x[0], '%H:%M'))
for i in range(len(schedule) - 1):
end_current = datetime.strptime(schedule[i][1], '%H:%M')
start_next = datetime.strptime(schedule[i + 1][0], '%H:%M')
if start_next - end_current >= timedelta(minutes=new_meeting):
return True
return False
user_schedule = [['09:00', '10:30'], ['11:00', '12:30'], ['14:00', '15:30']]
new_meeting_duration = 60
print(f"Есть ли свободное время для новой встречи: {check_free_time(user_schedule, new_meeting_duration)}")
Задача 21: Подсчет времени до ближайшего праздника
Напишите программу, которая определяет текущую дату и вычисляет сколько дней осталось до ближайшего праздника (например, Новый год).
Решение задачи 21
from datetime import datetime
def days_until_holiday(holidays):
current_date = datetime.now().date()
holidays.sort()
for holiday_date in holidays:
if holiday_date > current_date:
days_left = (holiday_date - current_date).days
return days_left
year = datetime.now().year
upcoming_holidays = [datetime(year, 12, 31).date(), datetime(year + 1, 1, 1).date(), datetime(year + 1, 1, 7).date()]
print(f"До ближайшего праздника осталось {days_until_holiday(upcoming_holidays)} дней")
Задача 22: Подсчет времени, проведенного на уроках
Напишите программу, которая запрашивает пользователя ввести время начала и время окончания каждого урока за день. Программа должна вычислить общее время, проведенное на уроках за день.
Решение задачи 22
from datetime import datetime
def calculate_total_lesson_time():
total_lesson_time = 0
num_lessons = int(input("Введите количество уроков за день: "))
for i in range(num_lessons):
start_time = input(f"Введите время начала урока {i+1} (ЧЧ:ММ): ")
end_time = input(f"Введите время окончания урока {i+1} (ЧЧ:ММ): ")
start = datetime.strptime(start_time, '%H:%M')
end = datetime.strptime(end_time, '%H:%M')
lesson_duration = (end - start).seconds / 60 # Преобразуем разницу в минуты
total_lesson_time += lesson_duration
return total_lesson_time
total_time = calculate_total_lesson_time()
print(f"Общее время, проведенное на уроках за день: {total_time} минут")
Задача 23: Проверка пересечения двух периодов времени
Напишите функцию, которая принимает на вход два периода времени и проверяет, пересекаются ли они. Каждый период задается временами его начала и окончания.
Решение задачи 23
from datetime import datetime
def check_time_periods_overlap(start1, end1, start2, end2):
if start1 < end2 and start2 < end1:
return True
else:
return False
start1 = datetime(2023, 1, 1, 12, 0)
end1 = datetime(2023, 1, 1, 14, 0)
start2 = datetime(2023, 1, 1, 13, 0)
end2 = datetime(2023, 1, 1, 15, 0)
print(f"Периоды времени пересекаются: {check_time_periods_overlap(start1, end1, start2, end2)}")
Задача 24: Определение часового пояса
Напишите программу, которая определяет текущий часовой пояс операционной системы.
Решение задачи 24
import time
def get_current_timezone():
utc_offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
hours = abs(utc_offset) // 3600
minutes = (abs(utc_offset) % 3600) // 60
sign = '+' if utc_offset <= 0 else '-'
return f"Текущий часовой пояс: UTC{sign}{hours:02}:{minutes:02}"
print(get_current_timezone())
Задача 25: Расчет времени выполнения задачи
Напишите программу, которая принимает время начала и время окончания выполнения задачи и вычисляет общее затраченное время в формате ЧЧ:ММ:СС.
Решение задачи 25
from datetime import datetime
def calculate_task_duration(start_time, end_time):
start = datetime.strptime(start_time, '%H:%M:%S')
end = datetime.strptime(end_time, '%H:%M:%S')
duration = end - start
total_seconds = duration.total_seconds()
hours = int(total_seconds // 3600)
minutes = int((total_seconds % 3600) // 60)
seconds = int(total_seconds % 60)
return f"Общее затраченное время: {hours:02}:{minutes:02}:{seconds:02}"
start_time = '08:45:00'
end_time = '12:30:15'
print(calculate_task_duration(start_time, end_time))
Задача 26: Проверка момента времени
Напишите функцию, которая принимает время и определяет, является ли оно утром, днем, вечером или ночью.
Решение задачи 26
from datetime import datetime
def time_of_day_check(current_time):
current_time = datetime.strptime(current_time, '%H:%M:%S').time()
if current_time.hour < 6:
return "Ночь"
elif 6 <= current_time.hour < 12:
return "Утро"
elif 12 <= current_time.hour < 18:
return "День"
else:
return "Вечер"
current_time = '20:45:00'
print(f"Текущее время: {current_time}, время суток: {time_of_day_check(current_time)}")
Задача 27: Подсчет количества выходных дней в периоде
Напишите программу, которая принимает начальную и конечную даты периода (включительно) и вычисляет количество выходных дней в этом периоде.
Решение задачи 27
from datetime import datetime, timedelta
def count_weekend_days(start_date, end_date):
current_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date, '%Y-%m-%d')
weekend_count = 0
while current_date <= end_date:
if current_date.weekday() >= 5: # Проверка на выходные (5-6 - суббота-воскресенье)
weekend_count += 1
current_date += timedelta(days=1)
return weekend_count
start_date = '2023-10-01'
end_date = '2023-10-31'
print(f"Количество выходных дней: {count_weekend_days(start_date, end_date)}")
Задача 28: Расчет возраста по дате рождения
Напишите программу, которая запрашивает у пользователя дату рождения в формате (ГГГГ-ММ-ДД) и вычисляет текущий возраст пользователя.
Решение задачи 28
from datetime import datetime
def calculate_age(birthdate):
birthdate = datetime.strptime(birthdate, '%Y-%m-%d')
current_date = datetime.now()
age = current_date.year - birthdate.year - ((current_date.month, current_date.day) < (birthdate.month, birthdate.day))
return age
birthdate = input("Введите дату рождения (ГГГГ-ММ-ДД): ")
print(f"Ваш текущий возраст: {calculate_age(birthdate)} лет")
Задача 29: Определение дня недели
Напишите функцию, которая принимает дату в формате (ГГГГ-ММ-ДД) и определяет день недели, к которому эта дата относится.
Решение задачи 29
from datetime import datetime
def get_weekday(date):
date = datetime.strptime(date, '%Y-%m-%d').weekday()
weekdays = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
return weekdays[date]
date = '2023-11-15'
print(f"День недели для {date}: {get_weekday(date)}")
Задача 30: Подсчет количества дней до ближайшего дня рождения
Напишите программу, которая запрашивает у пользователя свою дату рождения и вычисляет количество дней до ближайшего дня рождения.
Решение задачи 30
from datetime import datetime
def days_until_birthday(birthdate):
today = datetime.now().date()
birthdate = datetime.strptime(birthdate, '%Y-%m-%d').date().replace(year=today.year)
if birthdate < today:
birthdate = birthdate.replace(year=today.year + 1)
days_left = (birthdate - today).days
return days_left
birthdate = input("Введите дату рождения (ГГГГ-ММ-ДД): ")
print(f"До вашего следующего дня рождения осталось: {days_until_birthday(birthdate)} дней")
Шпаргалка по классам и форматам datetime
Модуль datetime содержит несколько классов. Почти все задачи ниже решаются комбинацией трех из них: date, datetime и timedelta.
| Класс | Что хранит | Пример создания |
|---|---|---|
date | Год, месяц, день | date(2025, 3, 15) |
time | Часы, минуты, секунды, микросекунды | time(14, 30) |
datetime | Дату и время вместе, можно с часовым поясом | datetime(2025, 3, 15, 14, 30) |
timedelta | Промежуток времени: дни, секунды, микросекунды | timedelta(days=3, hours=2) |
Строку в дату превращает datetime.strptime(), дату в строку strftime(). Обе функции используют одинаковые коды формата.
| Код | Значение | Пример |
|---|---|---|
%Y | Год из четырех цифр | 2025 |
%m | Месяц 01-12 | 03 |
%d | День месяца 01-31 | 15 |
%H / %I | Час в 24- и 12-часовом формате | 14 / 02 |
%M, %S | Минуты и секунды | 30, 05 |
%p | AM или PM | PM |
%A, %a | Название дня недели | Saturday, Sat |
Подробный разбор форматов есть в статьях про strftime и strptime, а арифметика интервалов описана на странице про timedelta.
Часовые пояса без сторонних библиотек
С Python 3.9 в стандартной библиотеке есть модуль zoneinfo, поэтому устанавливать pytz для перевода времени между поясами не нужно. Пояс передается в параметр tzinfo, а пересчет делает метод astimezone(). На Windows базе поясов может понадобиться пакет tzdata (pip install tzdata).
from datetime import datetime
from zoneinfo import ZoneInfo
moscow = datetime(2025, 3, 15, 12, 0, tzinfo=ZoneInfo("Europe/Moscow"))
print(moscow.astimezone(ZoneInfo("Asia/Tokyo")))
# 2025-03-15 18:00:00+09:00Объект без часового пояса называется наивным. Сравнивать или вычитать наивный и осведомленный datetime нельзя: Python выбросит TypeError. Полный список возможностей модуля приведен в официальной документации datetime.
Дополнительные задачи
Две задачи на частые ситуации из реальных программ: разбор русского формата даты и вывод интервала в читаемом виде.
Задача 31: Разбор даты в формате ДД.ММ.ГГГГ ЧЧ:ММ
Пользователь вводит строку вида 15.03.2025 14:30. Преобразуйте ее в объект datetime и выведите в формате ISO. Если строка не подходит под формат, программа должна сообщить об ошибке, а не завершаться с трассировкой.
Решение:
from datetime import datetime
def parse_ru(text):
try:
return datetime.strptime(text, "%d.%m.%Y %H:%M")
except ValueError:
return None
result = parse_ru("15.03.2025 14:30")
print(result.isoformat() if result else "Неверный формат")
# 2025-03-15T14:30:00Задача 32: Интервал в виде "N дн. ЧЧ:ММ"
Дан объект timedelta. Выведите его в виде количества дней и времени в часах и минутах. Учтите, что у timedelta нет атрибутов hours и minutes, их нужно вычислить из seconds.
Решение:
from datetime import timedelta
def pretty(delta):
hours, rest = divmod(delta.seconds, 3600)
minutes = rest // 60
return f"{delta.days} дн. {hours:02}:{minutes:02}"
print(pretty(timedelta(days=2, hours=5, minutes=7)))
# 2 дн. 05:07
Частые вопросы
Короткие ответы на вопросы, которые возникают при решении задач на даты.
Как получить текущую дату без времени?
Вызовите date.today() или datetime.now().date(). Оба варианта вернут объект date с годом, месяцем и днем, который удобно сравнивать с другими датами.
Почему разница дат в днях иногда меньше на единицу?
Атрибут days у timedelta отбрасывает неполные сутки. Если вычитать из полуночи текущий момент datetime.now(), остаток часов теряется. Для подсчета дней сравнивайте объекты date, а не datetime.
Чем time.perf_counter() лучше time.time() для замера скорости?
perf_counter() использует монотонные часы с максимальной точностью и не зависит от перевода системного времени. time.time() подходит для меток времени, но для измерения длительности кода менее надежен.
Как узнать номер дня недели?
Метод weekday() возвращает 0 для понедельника и 6 для воскресенья, а isoweekday() дает 1-7. Название дня на английском выводит strftime("%A").
Нужна ли библиотека pytz в новых проектах?
Для большинства задач нет: модуль zoneinfo из стандартной библиотеки работает с базой IANA и корректно учитывает переход на летнее время. pytz встречается в старом коде и требует особого метода localize().