У меня возникли проблемы с форматированием datetime.timedelta объекта.
Вот что я пытаюсь сделать: у меня есть список объектов, и одним из членов класса object является объект timedelta, который показывает продолжительность события. Я хотел бы отобразить эту продолжительность в формате часов: минут.
Я перепробовал множество методов для этого, и у меня возникли трудности. Мой текущий подход заключается в добавлении методов в класс для моих объектов, которые возвращают часы и минуты. Я могу получить часы, разделив timedelta.seconds на 3600 и округлив его. У меня возникли проблемы с получением оставшихся секунд и преобразованием их в минуты.
Кстати, я использую Google AppEngine с шаблонами Django для презентации.
Переведено автоматически
Ответ 1
Вы можете просто преобразовать timedelta в строку с помощью str(). Вот пример:
import datetime start = datetime.datetime(2009,2,10,14,00) end = datetime.datetime(2009,2,10,16,00) delta = end - start print(str(delta)) # prints 2:00:00
Ответ 2
Как вы знаете, вы можете получить значение total_seconds из объекта timedelta, обратившись к .seconds атрибуту.
Python предоставляет встроенную функцию divmod(), которая позволяет:
Передача timedelta объекта в str() функцию вызывает тот же код форматирования, который используется, если мы просто вводим print td. Поскольку вам не нужны секунды, мы можем разделить строку двоеточиями (на 3 части) и собрать ее обратно, оставив только первые 2 части.
Конечно, это не дает вам точно тот ответ, который вы искали (который, действительно, есть str(timeA - timeB)), но я обнаружил, что как только вы выходите за пределы нескольких часов, отображение быстро становится нечитаемым. humanize поддерживает гораздо большие значения, понятные человеку, а также хорошо локализован.
По-видимому, он вдохновлен модулем Django contrib.humanize, поэтому, поскольку вы используете Django, вам, вероятно, следует использовать это.