Answers:
您可以使用datetime.timedelta功能:
>>> import datetime
>>> str(datetime.timedelta(seconds=666))
'0:11:06'str(datetime.timedelta(seconds=60*60*24+1))='1 day, 0:00:01'
                    str(datetime.timedelta(seconds=round(666666.55)))正确渲染天数;限制小数秒。
                    timedelta不是溢出安全的,并且不能正确执行数学运算,例如str(timedelta(hours=8) - timedelta(hours=10)),结果为,'-1 day, 22:00:00'并且基于整数的解决方案正好适合您需要的那些情况'-02:00:00'。
                    通过使用divmod()仅执行一个除法运算就可以得到商和余数的函数,您只需执行两个数学运算就可以很快得出结果:
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)然后使用字符串格式将结果转换为所需的输出:
print('{:d}:{:02d}:{:02d}'.format(h, m, s)) # Python 3
print(f'{h:d}:{m:02d}:{s:02d}') # Python 3.6+'%d:%02dmn' % (seconds / 60, seconds % 60)
                    d, h = divmod(h, 24)。
                    m, d = divmod(m, 31)。糟糕,不可以。更糟糕的是,如果leap秒进入游戏,您的代码将是错误的。长话短说:使用timedelta并且不要弄乱日历,它会咬你。
                    timedelta处理deal秒吗?我怀疑不是。在许多应用程序中,这种简单的数学运算绰绰有余。
                    str(timedelta(hours=8) - timedelta(hours=10))结果为'-1 day,22:00:00 '所以... idk,如果它适用于leap秒,但不适用于负数。
                    我很难说出这种简单的方法(至少我不记得语法),但是可以使用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'gmtime用于将秒转换为所需的特殊元组格式strftime()。
注意:在23:59:59之后截断
time.strftime('%d %H:%M:%S', time.gmtime(1))=>'1天,0:00:01'。
                    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'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"{:0>8}".format(timedelta(milliseconds=66)) '0:00:00.066000'
                    without ':0>8':示例缺少前导0。{:0>8}左边的零填充为零8。
                    time.time()-start变量。有见识吗?TypeError: non-empty format string passed to object.__format__
                    datetime.now()而不是time.time()生成timedelta对象,但遇到了相同的错误。
                    这是我的快速技巧:
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到time,但可以将其添加到datetime。
UPD:同一技术的另一种变化:
my_time = (datetime.fromordinal(1) + timedelta(seconds=my_seconds)).time()而不是1可以使用大于0的任何数字。在这里,我们使用这样的事实,即datetime.fromordinal始终返回组件为零的datetime对象time。
这就是我的方法。
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']str(datetime.timedelta(seconds=666))
                    666.0和666.1值提供一致的字符串长度(以微秒为单位)。
                    以下设置对我有用。
def sec_to_hours(seconds):
    a=str(seconds//3600)
    b=str((seconds%3600)//60)
    c=str((seconds%3600)%60)
    d=["{} hours {} mins {} seconds".format(a, b, c)]
    return d
print(sec_to_hours(10000))
# ['2 hours 46 mins 40 seconds']
print(sec_to_hours(60*60*24+105))
# ['24 hours 1 mins 45 seconds']dateutil.relativedelta如果您还需要访问浮点数的小时,分钟和秒,则非常方便。datetime.timedelta没有提供类似的界面。
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)))版画
40.0
01:30:40seconds=5440而不是seconds=5540。不过,我喜欢您的回答!
                    小时(h)由楼层的秒数(//)除以3600(60分钟/小时* 60秒/分钟)
分钟(m),以剩余秒数(小时计算的剩余百分比,%)除以60(60秒/分钟)计算得出
类似地,以小时和分钟的余数计算秒数。
其余只是字符串格式!
def hms(seconds):
    h = seconds // 3600
    m = seconds % 3600 // 60
    s = seconds % 3600 % 60
    return '{:02d}:{:02d}:{:02d}'.format(h, m, s)
print(hms(7500))  # Should print 02h05m00s
division = 3623 // 3600 #to hours
division2 = 600 // 60 #to minutes
print (division) #write hours
print (division2) #write minutesPS我的代码不专业