如何将秒转换为小时,分钟和秒?

问题描述 投票:414回答:9

我有一个以秒为单位返回信息的函数,但是我需要以小时:分钟:秒存储该信息。

是否有一种简便的方法可以在Python中将秒转换为这种格式?

python
9个回答
654
投票

您可以使用datetime.timedelta功能:

datetime.timedelta

589
投票

通过使用>>> import datetime >>> str(datetime.timedelta(seconds=666)) '0:11:06' 函数,该函数仅进行一次除法以同时产生商和余数,您只需执行两个数学运算就可以非常快速地得到结果:

divmod()

然后使用divmod()将结果转换为所需的输出:

m, s = divmod(seconds, 60)
h, m = divmod(m, 60)

59
投票

我很难说出这种简单的方法(至少我不记得语法),但是可以使用string formatting,它可以更好地控制格式:

print('{:d}:{:02d}:{:02d}'.format(h, m, s)) # Python 3
print(f'{h:d}:{m:02d}:{s:02d}') # Python 3.6+

[time.strftime用于将秒转换为from time import strftime from time import gmtime strftime("%H:%M:%S", gmtime(666)) '00:11:06' strftime("%H:%M:%S", gmtime(60*60*24)) '00:00:00' 所需的特殊元组格式。

注意:在23:59:59之后截断


34
投票

使用gmtime

使用strftime()格式:

datetime

没有':0>8'格式:

from datetime import timedelta

"{:0>8}".format(str(timedelta(seconds=66)))
# Result: '00:01:06'

"{:0>8}".format(str(timedelta(seconds=666777)))
# Result: '7 days, 17:12:57'

"{:0>8}".format(str(timedelta(seconds=60*60*49+109)))
# Result: '2 days, 1:01:49'

使用':0>8'

"{}".format(str(timedelta(seconds=66)))
# Result: '00:01:06'

"{}".format(str(timedelta(seconds=666777)))
# Result: '7 days, 17:12:57'

"{}".format(str(timedelta(seconds=60*60*49+109)))
# Result: '2 days, 1:01:49'

16
投票

这是我的快速技巧:

time

有关更多信息,请访问:from time import gmtime from time import strftime # NOTE: The following resets if it goes over 23:59:59! strftime("%H:%M:%S", gmtime(125)) # Result: '00:02:05' strftime("%H:%M:%S", gmtime(60*60*24-1)) # Result: '23:59:59' strftime("%H:%M:%S", gmtime(60*60*24)) # Result: '00:00:00' strftime("%H:%M:%S", gmtime(666777)) # Result: '17:12:57' # Wrong


8
投票

如果需要获取from humanfriendly import format_timespan secondsPassed = 1302 format_timespan(secondsPassed) # '21 minutes and 42 seconds' 值,则可以使用此技巧:

https://humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_timespan

您不能将datetime.time添加到my_time = (datetime(1970,1,1) + timedelta(seconds=my_seconds)).time() ,但可以将其添加到timedelta

UPD:同一技术的另一种变化:

time

datetime可以使用大于0的任何数字。在这里,我们使用my_time = (datetime.fromordinal(1) + timedelta(seconds=my_seconds)).time() 总是返回1对象且datetime.fromordinal分量为零的事实。


4
投票

这就是我的方法。

datetime

一些例子:

time

2
投票

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'] 没有提供类似的界面。

dateutil.relativedelta

打印

datetime.timedelta

1
投票

以下设置对我有用。

from dateutil.relativedelta import relativedelta
rt = relativedelta(seconds=5440)
print(rt.seconds)
print('{:02d}:{:02d}:{:02d}'.format(
    int(rt.hours), int(rt.minutes), int(rt.seconds)))
© www.soinside.com 2019 - 2024. All rights reserved.