Документация по Python. Теоретические материалы, и практические задачи

Python Дата Время

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

Язык программирования Python предоставляет мощные инструменты для работы с датой и временем. В этой статье мы рассмотрим основные возможности, которые предоставляет Python для работы с датами и временем.

Модуль datetime

В Python для работы с датой и временем используется модуль datetime. Этот модуль позволяет создавать объекты для представления даты, времени и даты-времени, а также проводить операции над этими объектами.

Ниже представлен список практических задач Python Дата Время. Решение практических задач позволит закрепить вам теоретические знания на практике.

Содержание:

  1. Подсчет количества дней до определенной даты
  2. Форматирование времени в определенный формат
  3. Перевод времени из одного часового пояса в другой
  4. Определение дня недели для определенной даты
  5. Подсчет времени выполнения кода
  6. Создание таймера обратного отсчета
  7. Поиск разницы между двумя датами
  8. Генерация списка дат в определенном диапазоне
  9. Проверка на високосный год
  10. Вычисление возраста по дате рождения
  11. Поиск следующего рабочего дня
  12. Подсчет количества рабочих дней между двумя датами
  13. Подсчет времени выполнения функции
  14. Определение количества дней до следующего дня рождения
  15. Проверка пересечения двух периодов времени
  16. Подсчет времени работы над проектом
  17. Определение даты через определенное количество рабочих дней
  18. Вычисление времени окончания операции
  19. Подсчет количества рабочих часов
  20. Проверка наличия свободного времени
  21. Подсчет времени до ближайшего праздника
  22. Подсчет времени, проведенного на уроках
  23. Проверка пересечения двух периодов времени
  24. Определение часового пояса
  25. Расчет времени выполнения задачи
  26. Проверка момента времени
  27. Подсчет количества выходных дней в периоде
  28. Расчет возраста по дате рождения
  29. Определение дня недели
  30. Подсчет количества дней до ближайшего дня рождения

Задача 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 = '2022-12-31'
print(f"До {target_date} осталось {days_until(target_date)} дней.")

Задача 2: Форматирование времени в определенный формат

Описание задачи:

Вам необходимо создать функцию, которая принимает время в формате ЧЧ:ММ:СС и возвращает его в формате Часы AM/PM: Минуты.

Решение задачи:

                    
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: Перевод времени из одного часового пояса в другой

Описание задачи:

Напишите программу, которая позволит пользователю ввести время и указать текущий и желаемый часовой пояс для перевода времени.

Решение задачи:

                    
from pytz import timezone
from datetime import datetime

def convert_timezone(input_time, current_timezone, desired_timezone):
    current_tz = timezone(current_timezone)
    desired_tz = timezone(desired_timezone)
    
    time_obj = datetime.strptime(input_time, '%H:%M:%S')
    current_time = current_tz.localize(time_obj)
    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: Определение дня недели для определенной даты

Описание задачи:

Напишите программу, которая запрашивает у пользователя ввод даты в формате гггг-мм-дд и выводит соответствующий день недели.

Решение задачи:

                    
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: Подсчет времени выполнения кода

Описание задачи:

Необходимо написать функцию-декоратор для измерения времени выполнения других функций.

Решение задачи:

                    
import time

def measure_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_time
def example_function():
    time.sleep(2)

example_function()

Задача 6: Создание таймера обратного отсчета

Описание задачи:

Напишите программу для создания таймера обратного отсчета, который принимает количество секунд и выводит обновляющееся время до завершения отсчета.

Решение задачи:

                    
import time

def countdown_timer(seconds):
    while seconds > 0:
        print(f"Осталось времени: {seconds} секунд")
        time.sleep(1)
        seconds -= 1
    print("Отсчет завершен!")

countdown_timer(10)

Задача 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: Генерация списка дат в определенном диапазоне

Описание задачи:

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

Решение задачи:

                    
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: Проверка на високосный год

Описание задачи:

Напишите функцию, которая принимает год в качестве аргумента и проверяет, является ли он високосным.

Решение задачи:

                    
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: Вычисление возраста по дате рождения

Описание задачи:

Напишите программу, которая запрашивает у пользователя дату его рождения и затем вычисляет и выводит его текущий возраст.

Решение задачи:

                    
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: Поиск следующего рабочего дня

Описание задачи:

Напишите функцию, которая принимает текущую дату и возвращает следующий рабочий день (понедельник-пятница). Если текущий день пятница, то вернуть понедельник следующей недели.

Решение задачи:

                    
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: Подсчет количества рабочих дней между двумя датами

Описание задачи:

Напишите функцию, которая принимает начальную и конечную даты и возвращает количество рабочих дней между ними (исключая выходные).

Решение задачи:

                    
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: Подсчет времени выполнения функции

Описание задачи:

Напишите функцию-декоратор, которая измеряет время выполнения других функций и выводит результат.

Решение задачи:

                    
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: Определение количества дней до следующего дня рождения

Описание задачи:

Напишите программу, которая запрашивает у пользователя его день рождения и затем выводит количество дней до его следующего дня рождения.

Решение задачи:

                    
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: Проверка пересечения двух периодов времени

Описание задачи:

Напишите функцию, которая принимает на вход два периода времени и проверяет, есть ли у них хотя бы одна общая дата.

Решение задачи:

                    
from datetime import datetime

def check_time_periods_overlap(start1, end1, start2, end2):
    period1 = range(int(start1.timestamp()), int(end1.timestamp()))
    period2 = range(int(start2.timestamp()), int(end2.timestamp()))
    if set(period1).intersection(period2):
        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: Подсчет времени работы над проектом

Описание задачи:

Напишите программу для учета времени работы над проектом. Программа должна записывать время начала и окончания работы над проектом, а затем выводить общее затраченное время.

Решение задачи:

                    
from datetime import datetime

start_time = datetime.now()

# Здесь выполняется работа над проектом

end_time = datetime.now()
total_time = end_time - start_time
print(f"Общее затраченное время: {total_time}")

Задача 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: Вычисление времени окончания операции

Описание задачи:

Напишите функцию, которая принимает время начала операции и ожидаемое время выполнения в минутах, а затем вычисляет время окончания операции.

Решение задачи:

                    
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: Подсчет количества рабочих часов

Описание задачи:

Напишите программу, которая принимает начальное и конечное время работы над проектом (в формате ЧЧ:ММ) и вычисляет общее количество отработанных рабочих часов.

Решение задачи:

                    
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: Проверка наличия свободного времени

Описание задачи:

Напишите функцию, которая принимает список запланированных встреч (время начала и конца) и новую встречу. Функция должна определить, есть ли у пользователя свободное время между встречами для новой встречи.

Решение задачи:

                    
from datetime import datetime

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: Подсчет времени до ближайшего праздника

Описание задачи:

Напишите программу, которая определяет текущую дату и вычисляет сколько дней осталось до ближайшего праздника (например, Новый год).

Решение задачи:

                    
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

upcoming_holidays = [datetime(2022, 12, 31).date(), datetime(2023, 1, 7).date()]
print(f"До ближайшего праздника осталось {days_until_holiday(upcoming_holidays)} дней")

Задача 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: Проверка пересечения двух периодов времени

Описание задачи:

Напишите функцию, которая принимает на вход два периода времени и проверяет, пересекаются ли они. Каждый период задается временами его начала и окончания.

Решение задачи:

                    
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: Определение часового пояса

Описание задачи:

Напишите программу, которая определяет текущий часовой пояс операционной системы.

Решение задачи:

                    
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: Расчет времени выполнения задачи

Описание задачи:

Напишите программу, которая принимает время начала и время окончания выполнения задачи и вычисляет общее затраченное время в формате ЧЧ:ММ:СС.

Решение задачи:

                    
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: Проверка момента времени

Описание задачи:

Напишите функцию, которая принимает время и определяет, является ли оно утром, днем, вечером или ночью.

Решение задачи:

                    
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: Подсчет количества выходных дней в периоде

Описание задачи:

Напишите программу, которая принимает начальную и конечную даты периода (включительно) и вычисляет количество выходных дней в этом периоде.

Решение задачи:

                    
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: Расчет возраста по дате рождения

Описание задачи:

Напишите программу, которая запрашивает у пользователя дату рождения в формате (ГГГГ-ММ-ДД) и вычисляет текущий возраст пользователя.

Решение задачи:

                    
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: Определение дня недели

Описание задачи:

Напишите функцию, которая принимает дату в формате (ГГГГ-ММ-ДД) и определяет день недели, к которому эта дата относится.

Решение задачи:

                    
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: Подсчет количества дней до ближайшего дня рождения

Описание задачи:

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

Решение задачи:

                    
from datetime import datetime

def days_until_birthday(birthdate):
    birthdate = datetime.strptime(birthdate, '%Y-%m-%d').replace(year=datetime.now().year)
    if birthdate < datetime.now():
        birthdate = birthdate.replace(year=datetime.now().year + 1)
    days_left = (birthdate - datetime.now()).days
    return days_left

birthdate = input("Введите дату рождения (ГГГГ-ММ-ДД): ")
print(f"До вашего следующего дня рождения осталось: {days_until_birthday(birthdate)} дней")

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *