Как конвертировать секунды в часы, минуты и секунды?

У меня есть функция, которая возвращает информацию в секундах, но мне нужно сохранить эту информацию в часах: минуты: секунды.

Есть ли простой способ конвертировать секунды в этот формат в python?

или вы можете сделать

>>> import datetime >>> str(datetime.timedelta(seconds=666)) '0:11:06' 

Используя divmod() , которая выполняет только одно деление для получения как частного, так и остального, вы можете получить результат очень быстро только с двумя математическими операциями:

 m, s = divmod(seconds, 60) h, m = divmod(m, 60) print "%d:%02d:%02d" % (h, m, s) 

Я не могу назвать это простым способом (по крайней мере, я не могу вспомнить синтаксис), но можно использовать time.strftime , что дает больший контроль над форматированием:

 >>> import time >>> time.strftime("%H:%M:%S", time.gmtime(666)) '00:11:06' 

gmtime используется для преобразования секунд в специальный формат tuple, который требуется strftime() .

 >>> "{:0>8}".format(datetime.timedelta(seconds=66)) >>> '00:01:06' # good 

а также:

 >>> "{:0>8}".format(datetime.timedelta(seconds=666777)) >>> '7 days, 17:12:57' # nice 

без ‘: 0> 8’:

 >>> "{}".format(datetime.timedelta(seconds=66)) >>> '0:01:06' # not HH:MM:SS 

а также:

 >>> time.strftime("%H:%M:%S", time.gmtime(666777)) >>> '17:12:57' # wrong 

но:

 >>> "{:0>8}".format(datetime.timedelta(seconds=620000)) >>> '7 days, 4:13:20' # bummer 

Это мой быстрый трюк:

 import humanfriendly humanfriendly.format_timespan(secondsPassed) 

посетите: https://humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_timespan для получения дополнительной информации.

Если вам нужно получить значение datetime.time , вы можете использовать этот трюк:

 my_time = (datetime(1970,1,1) + timedelta(seconds=my_seconds)).time() 

Вы не можете добавить timedelta time , но можете добавить его в datetime .

UPD : Еще один вариант того же метода:

 my_time = (datetime.fromordinal(1) + timedelta(seconds=my_seconds)).time() 

Вместо 1 вы можете использовать любое число, большее 0. Здесь мы используем тот факт, что datetime.fromordinal всегда будет возвращать объект datetime time компонент time равен нулю.

Вот как я это понял.

 def sec2time(sec, n_msec=3): ''' Convert seconds to 'D days, HH:MM:SS.FFF' ''' if hasattr(sec,'__len__'): return [sec2time(s) for s in sec] m, s = divmod(sec, 60) h, m = divmod(m, 60) d, h = divmod(h, 24) if n_msec > 0: pattern = '%%02d:%%02d:%%0%d.%df' % (n_msec+3, n_msec) else: pattern = r'%02d:%02d:%02d' if d == 0: return pattern % (h, m, s) return ('%d days, ' + pattern) % (d, h, m, s) 

Некоторые примеры:

 $ sec2time(10, 3) Out: '00:00:10.000' $ sec2time(1234567.8910, 0) Out: '14 days, 06:56:07' $ sec2time(1234567.8910, 4) Out: '14 days, 06:56:07.8910' $ sec2time([12, 345678.9], 3) Out: ['00:00:12.000', '4 days, 00:01:18.900'] 
  • Почему аргументы, не относящиеся к умолчанию, соответствуют аргументам по умолчанию?
  • Декодер classа classа Python с собственными аргументами?
  • Функции, которые помогают понять структуру json (dict)
  • Может ли Python распечатать определение функции?
  • Как использовать инструкцию pass?
  • Почему некоторые встроенные функции Python имеют пропуск?
  • Как я могу сделать один файл python другим?
  • Поверните строку в оператор
  • Как точно работает понимание генератора?
  • Selenium "selenium.common.exceptions.NoSuchElementException" при использовании Chrome
  • Вызов функции модуля с использованием его имени (строки)
  • Давайте будем гением компьютера.