Python时间秒到h:m:s

我有一个函数,可以在几秒钟内返回信息,但我需要以小时:分钟:秒存储信息。 有没有一种简单的方法将秒转换为这种格式的Python?

通过使用divmod()函数,该函数只进行一个单独的除法来生成商和余数,只需两个math运算即可得到结果:

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

或者你可以做

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

我很难用一种简单的方法来命名(至less我不记得语法),但是可以使用time.strftime ,它可以更好地控制格式化:

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

gmtime用于将秒转换为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 

如果你需要得到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() 

您可以使用任何大于0的数字,而不是1这里我们使用datetime.fromordinal将始终返回time分量为零的datetime对象的事实。

这是我得到它。

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

这是我的快速技巧:

 import humanfriendly humanfriendly.format_timespan(secondsPassed) 

请访问: https : //humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_timespan了解更多信息。