Мы попробовали несколько приложений, обе пробных версии коммерческих продуктов и в свободном доступе. В конечном счете это был испытательный выпуск программное обеспечение Team Test Load Agent , которое мы попробовали. Это определенно работает отлично и справедливо просто в использовании. В конечном счете это поддержало наш аргумент, чтобы переместиться в Сервер Основы Команды и оборудовать все части отдела с соответствующими инструментами.
очевидная оборотная сторона, однако, является ценой.
Я не могу поверить, что какой-либо из множества ответов дает то, что я считаю "одним очевидным способом сделать это" (и я даже не голландец ...! -) - - до чуть менее 24 часов в секундах (86399 секунд, в частности):
>>> import time
>>> time.strftime('%H:%M:%S', time.gmtime(12345))
'03:25:45'
Выполнение этого в шаблоне Django более привередливо, поскольку фильтр time
поддерживает забавный синтаксис форматирования времени (вдохновленный, Я полагаю, из PHP), а также нужен модуль datetime и реализация часового пояса, такая как pytz, для подготовки данных. Например:
>>> from django import template as tt
>>> import pytz
>>> import datetime
>>> tt.Template('{{ x|time:"H:i:s" }}').render(
... tt.Context({'x': datetime.datetime.fromtimestamp(12345, pytz.utc)}))
u'03:25:45'
В зависимости от ваших конкретных потребностей, может быть удобнее определить собственный фильтр для этой задачи форматирования в вашем приложении.
Код, который выполняет то, что было запрошено, с примерами и показывающим, как обрабатываются случаи, которые он не указал:
def format_seconds_to_hhmmss(seconds):
hours = seconds // (60*60)
seconds %= (60*60)
minutes = seconds // 60
seconds %= 60
return "%02i:%02i:%02i" % (hours, minutes, seconds)
def format_seconds_to_mmss(seconds):
minutes = seconds // 60
seconds %= 60
return "%02i:%02i" % (minutes, seconds)
minutes = 60
hours = 60*60
assert format_seconds_to_mmss(7*minutes + 30) == "07:30"
assert format_seconds_to_mmss(15*minutes + 30) == "15:30"
assert format_seconds_to_mmss(1000*minutes + 30) == "1000:30"
assert format_seconds_to_hhmmss(2*hours + 15*minutes + 30) == "02:15:30"
assert format_seconds_to_hhmmss(11*hours + 15*minutes + 30) == "11:15:30"
assert format_seconds_to_hhmmss(99*hours + 15*minutes + 30) == "99:15:30"
assert format_seconds_to_hhmmss(500*hours + 15*minutes + 30) == "500:15:30"
Вы можете - и, вероятно, должны - сохранить это как timedelta, а чем int, но это отдельная проблема, и timedelta на самом деле не упрощает эту конкретную задачу.
>>> a = datetime.timedelta(seconds=65)
datetime.timedelta(0, 65)
>>> str(a)
'0:01:05'
Вы можете рассчитать количество минут и часов по количеству секунд простым делением:
seconds = 12345
minutes = seconds // 60
hours = minutes // 60
print "%02d:%02d:%02d" % (hours, minutes % 60, seconds % 60)
print "%02d:%02d" % (minutes, seconds % 60)
Здесь //
- целочисленное деление Python.
Прочтите модуль datetime .
В ответе SilentGhost есть подробности, которые мой ответ опускает и помещает здесь:
>>> a = datetime.timedelta(seconds=65)
datetime.timedelta(0, 65)
>>> str(a)
'0:01:05'
Будьте осторожны при делении на 60: деление между целыми числами возвращает целое число -> 12/60 = 0, если вы не импортируете деление из будущего. Следующее скопировано и вставлено из Python 2.6.2:
IDLE 2.6.2
>>> 12/60
0
>>> from __future__ import division
>>> 12/60
0.20000000000000001
Если вы используете divmod, вы невосприимчивы к различным вариантам целочисленного деления:
# show time strings for 3800 seconds
# easy way to get mm:ss
print "%02d:%02d" % divmod(3800, 60)
# easy way to get hh:mm:ss
print "%02d:%02d:%02d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(3800,),60,60])
# function to convert floating point number of seconds to
# hh:mm:ss.sss
def secondsToStr(t):
return "%02d:%02d:%02d.%03d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(t*1000,),1000,60,60])
print secondsToStr(3800.123)
Выводит:
63:20
01:03:20
01:03:20.123
Не являюсь человеком Python, но проще всего без библиотек просто:
total = 3800
seconds = total % 60
total = total - seconds
hours = total / 3600
total = total - (hours * 3600)
mins = total / 60
Помимо того факта, что Python имеет встроенную поддержку даты и времени (см. Ответ bigmattyh), найти минуты или часы из секунд очень просто:
minutes = seconds / 60
hours = minutes / 60
Теперь, когда вы хотите отобразить минуты или секунды, измените их на 60, чтобы что они не будут больше 59