Как вычислить разницу между двумя временами и вывести ее в формате "часы:минуты"?

Python:


import datetime

def diff_time(start_time, end_time):
  """Вычисляет разницу между двумя временами в формате ЧЧ:ММ."""
  start = datetime.datetime.strptime(start_time, "%H:%M")
  end = datetime.datetime.strptime(end_time, "%H:%M")
  diff = end - start
  hours = diff.seconds // 3600
  minutes = (diff.seconds % 3600) // 60
  return f"{hours:02}:{minutes:02}"

# Пример использования
start_time = "10:30"
end_time = "12:45"
difference = diff_time(start_time, end_time)
print(difference)  # Вывод: 02:15
  

Объяснение:

  • Используется модуль datetime для работы со временем.
  • datetime.datetime.strptime() преобразует строки времени в объекты datetime.
  • Вычисляется разница между двумя объектами datetime.
  • Извлекаются часы и минуты из разницы в секундах.
  • Форматируется результат в строку "ЧЧ:ММ" с использованием f-строк и форматирования :02 для добавления ведущих нулей.

Для вычисления разницы между двумя временами и вывода ее в формате "часы:минуты" в Python, можно использовать модуль datetime. Вот пример:


  from datetime import datetime, timedelta

  def calculate_time_difference(start_time, end_time):
    """
    Вычисляет разницу между двумя временами и возвращает ее в формате "часы:минуты".

    Args:
      start_time: Строка, представляющая начальное время в формате "HH:MM".
      end_time: Строка, представляющая конечное время в формате "HH:MM".

    Returns:
      Строка, представляющая разницу между временами в формате "часы:минуты".
      Возвращает None, если ввод некорректен.
    """
    try:
      start_datetime = datetime.strptime(start_time, "%H:%M")
      end_datetime = datetime.strptime(end_time, "%H:%M")

      # Учитываем, что end_time может быть меньше start_time (например, 23:00 - 01:00)
      if end_datetime < start_datetime:
        end_datetime += timedelta(days=1) # добавляем один день к end_datetime

      time_difference = end_datetime - start_datetime
      total_seconds = int(time_difference.total_seconds())
      hours = total_seconds // 3600
      minutes = (total_seconds % 3600) // 60

      return f"{hours:02d}:{minutes:02d}"  # Форматируем как "HH:MM"

    except ValueError:
      return None  # Возвращаем None при ошибке парсинга времени

  # Пример использования
  start_time = "08:30"
  end_time = "17:45"
  difference = calculate_time_difference(start_time, end_time)

  if difference:
    print(f"Разница между {start_time} и {end_time}: {difference}")  # Вывод: Разница между 08:30 и 17:45: 09:15
  else:
    print("Некорректный формат времени.")

  start_time = "23:00"
  end_time = "01:00"
  difference = calculate_time_difference(start_time, end_time)

  if difference:
    print(f"Разница между {start_time} и {end_time}: {difference}") # Вывод: Разница между 23:00 и 01:00: 02:00
  else:
    print("Некорректный формат времени.")
  

Объяснение:

  • Импортируем datetime и timedelta из модуля datetime.
  • Определяем функцию calculate_time_difference, которая принимает две строки, представляющие начальное и конечное время.
  • Используем datetime.strptime() для преобразования строк времени в объекты datetime. Формат "%H:%M" указывает, что мы ожидаем часы и минуты.
  • Обрабатываем ситуацию, когда время окончания меньше времени начала (например, когда время окончания относится к следующему дню). Добавляем timedelta(days=1) к времени окончания в этом случае.
  • Вычисляем разницу между datetime объектами. Это вернет объект timedelta.
  • Извлекаем общее количество секунд из timedelta объекта, используя total_seconds(). Приводим к типу int.
  • Вычисляем часы и минуты из общего количества секунд.
  • Форматируем результат в строку "HH:MM" с помощью f-строки и :02d (двузначное число с ведущим нулем, если необходимо).
  • Добавлена обработка исключений ValueError, чтобы обработать случаи, когда входные строки не соответствуют ожидаемому формату "HH:MM". В случае ошибки возвращается None.
0