У меня есть таймделта. Я хочу дни, часы и минуты от этого - либо как кортеж, либо как словарь ... Я не смущен.
Должно быть, я делал это дюжину раз на дюжине языков, но у Python обычно есть простой ответ на все вопросы, поэтому я подумал спросить здесь, прежде чем приступить к изучению тошнотворно простой (но многословной) математики.
Мистер Фуз поднимает хорошую мысль.
Я имею дело с «списками» (немного похожими на списки на ebay), где у каждого есть продолжительность. Я пытаюсь найти оставшееся время, делаяwhen_added + duration - now
Правильно ли я сказал, что не будет учитывать DST? Если нет, то какой самый простой способ сложить / вычесть час?
timedelta
объекта «datetime.timedelta (seconds = 1177)» : просто используйте str ()Ответы:
Если у вас есть
datetime.timedelta
значениеtd
,td.days
уже дает вам «дней», которые вы хотите.timedelta
значения сохраняют долю дня в секундах (а не в часах или минутах), поэтому вам действительно придется выполнять «тошнотворно простую математику», например:источник
td
отрицательно,-1 // 3600
есть-1
.//
используется вместо/
получения целого числа, а не с плавающей точкой.//
является оператором деления на этаж: «деление, которое приводит к целому числу, отрегулированному влево в числовой строке», см. здесь .jcrs
отмечалось,-1//3600
является-1
, так почему бы не использоватьint(td.seconds/3600)
вместо того, чтобы повернуть-1
второй в0
часы , а не1
час назад?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60
а затемseconds = x.seconds - hours*3600 - minutes*60
Это немного компактнее, вы получите часы, минуты и секунды в две строки.
источник
td.days
не ноль. Вам нужноhours += td.days*24
. Если вы хотите учитывать доли секунды (OP не делает);seconds += td.microseconds / 1e6
может быть использован.Что касается летнего времени, я думаю, что лучше всего конвертировать оба
datetime
объекта в секунды. Таким образом, система рассчитывает DST для вас.источник
mktime()
может произойти сбой, если местный часовой пояс может иметь различное смещение utc в разное время (многие это делают) - вы можете использоватьpytz
модуль для получения доступа к базе данных tz портативным детерминистическим способом. Кроме того, местное время может быть неоднозначным (50% вероятности ошибки) - вам нужна дополнительная информация для устранения неоднозначности, например, часто (не всегда) даты в файле журнала монотонны . См. Как я могу вычесть день из даты питона? что, возможно, придется иметь дело с аналогичными проблемами.Я не понимаю
как насчет этого
Вы получаете минуты и секунды минуты как поплавок.
источник
Я использовал следующее:
источник
Timedeltas имеют
days
иseconds
атрибут. Вы можете конвертировать их самостоятельно.источник