Python:将秒转换为hh:mm:ss

请,如何将int(数字秒)转换为这些格式: mm:sshh:mm:ss

我需要用Python代码(如果可能的话,在Django模板?)。

非常感谢你 ;-)

我无法相信任何一个答案给出了我认为“一个显而易见的方式来做到这一点”(我甚至不是荷兰人……) – 最多只有24小时的价值秒(86399秒,具体):

>>> import time >>> time.strftime('%H:%M:%S', time.gmtime(12345)) '03:25:45' 

由于timefilter支持时髦的时间格式语法(我相信,来自PHP),并且还需要datetime模块和时区实现(如pytz)来准备数据,所以在Django模板中做这件事更加挑剔。 例如:

 >>> 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' 

根据您的确切需要,在您的应用中为此格式化任务定义自定义filter可能会更方便。

 >>> a = datetime.timedelta(seconds=65) datetime.timedelta(0, 65) >>> str(a) '0:01:05' 

代码完成所请求的内容,并带有示例,并显示他没有指定的情况如何处理:

 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实际上并没有使这个特定的任务变得更容易。

你读过date时间模块吗?

编辑/更新: SilentGhost的答案有我的答案遗漏的细节。 如果你喜欢这个答案,也可以+1(或者相反)。 在这里转贴:

 >>> a = datetime.timedelta(seconds=65) datetime.timedelta(0, 65) >>> str(a) '0:01:05' 

如果你使用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 

您可以通过简单的划分从秒数中计算分钟数和小时数:

 seconds = 12345 minutes = seconds // 60 hours = minutes // 60 print "%02d:%02d:%02d" % (hours, minutes % 60, seconds % 60) print "%02d:%02d" % (minutes, seconds % 60) 

这里//是python整数除法。

除以60之后要小心:整数之间的除法将返回一个整数 – > 12/60 = 0,除非您从未来导入除法。 以下是从Python 2.6.2复制和粘贴:

 IDLE 2.6.2 >>> 12/60 0 >>> from __future__ import division >>> 12/60 0.20000000000000001 

不是一个Python的人,但最简单的没有任何图书馆只是:

 total = 3800 seconds = total % 60 total = total - seconds hours = total / 3600 total = total - (hours * 3600) mins = total / 60 

更新的代码,谢谢

除了Python已经支持date和时间(请参阅bigmattyh的回复)之外,从几秒钟开始查找分钟或小时也很容易:

 minutes = seconds / 60 hours = minutes / 60 

现在,当你想显示分钟或秒钟时,将它们调整60,使它们不会大于59

如果你需要做很多事情,你可以预先计算一天中秒数的所有可能的string:

 try: from itertools import product except ImportError: def product(*seqs): if len(seqs) == 2: for s1 in seqs[0]: for s2 in seqs[1]: yield (s1,s2) else: for s in seqs[0]: for p in product(*seqs[1:]): yield (s,) + p hhmmss = {} i = 0 for (h,m,s) in product(range(24),range(60),range(60)): hhmmss[i] = "%02d:%02d:%02d" % (h,m,s) i += 1 

现在秒转换为格式string是一个快速的字典查找:

 print hhmmss[12345] 

版画

 '03:25:45'