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了解更多信息。