python – 如何将秒转换为小时,分钟和秒?
我有一个在几秒钟内返回信息的函数,但我需要以小时:分钟:秒存储该信息。
有没有一种简单的方法可以在Python中将秒转换为这种格式?
7个解决方案
553 votes
或者你可以这样做:
>>> import datetime
>>> str(datetime.timedelta(seconds=666))
‘0:11:06’
SilentGhost answered 2019-01-07T02:50:35Z
546 votes
通过使用divmod()函数,它只生成一个除法来产生商和余数,只需两个数学运算就可以非常快速地得到结果:
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
print “%d:%02d:%02d” % (h, m, s)
Brandon Rhodes answered 2019-01-07T02:50:57Z
55 votes
我很难说这是一个简单的方法(至少我不记得语法),但可以使用time.strftime,它可以更好地控制格式:
>>> import time
>>> time.strftime(“%H:%M:%S”, time.gmtime(666))
’00:11:06′
gmtime用于将秒转换为strftime()所需的特殊元组格式。
anatoly techtonik answered 2019-01-07T02:51:26Z
31 votes
>>> import datetime
>>> “{:0>8}”.format(datetime.timedelta(seconds=66))
>>> “{:0>8}”.format(str(datetime.timedelta(seconds=66))) # Python3
>>> ’00:01:06′ # good
和:
>>> “{:0>8}”.format(datetime.timedelta(seconds=666777))
>>> “{:0>8}”.format(str(datetime.timedelta(seconds=666777))) # Python3
>>> ‘7 days, 17:12:57’ # nice
没有’:0> 8’:
>>> “{}”.format(datetime.timedelta(seconds=66))
>>> ‘0:01:06’ # not HH:MM:SS
和:
>>> import time
>>> time.strftime(“%H:%M:%S”, time.gmtime(666777))
>>> ’17:12:57′ # wrong
但:
>>> “{:0>8}”.format(datetime.timedelta(seconds=620000))
>>> “{:0>8}”.format(str(datetime.timedelta(seconds=620000))) # Python3
>>> ‘7 days, 4:13:20’ # bummer
marcell answered 2019-01-07T02:51:53Z
12 votes
这是我的快速诀窍:
import humanfriendly
humanfriendly.format_timespan(secondsPassed)
访问:[https://humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_timespan]了解更多信息。
doories answered 2019-01-07T02:52:23Z
8 votes
如果你需要获得1值,你可以使用这个技巧:
my_time = (datetime(1970,1,1) + timedelta(seconds=my_seconds)).time()
您不能将1添加到datetime.fromordinal,但可以添加到datetime。
UPD:同一技术的另一种变体:
my_time = (datetime.fromordinal(1) + timedelta(seconds=my_seconds)).time()
您可以使用任何大于0的数字代替1。这里我们使用的事实是datetime.fromordinal将始终返回datetime对象,其中time组件为零。
MarSoft answered 2019-01-07T02:53:05Z
2 votes
这就是我得到它的方式。
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’]
Lee answered 2019-01-07T02:53:34Z