使用timedelta时小数位太多

l00*_*ake 3 python timedelta python-3.x

我试图在小时和分钟内找到时间,然而,我知道如何做的唯一方法是使用我在下面所做的.下面也是我的输出,你可以看到,程序返回秒和小数后.

码:

def commercial_time (distance, speed_of_commercial):
    time = distance / speed_of_commercial
    seconds = time * 3600
    real = (datetime.timedelta(seconds = seconds))
    return real
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

9:46:04.352515
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法摆脱".352515"?如果可能的话,我也想隐藏秒数.

Mar*_*ers 6

timedelta手动格式化:

def custom_format(td):
    minutes, seconds = divmod(td.seconds, 60)
    hours, minutes = divmod(minutes, 60)
    return '{:d}:{:02d}'.format(hours, minutes)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> from datetime import timedelta
>>> def custom_format(td):
...     minutes, seconds = divmod(td.seconds, 60)
...     hours, minutes = divmod(minutes, 60)
...     return '{:d}:{:02d}'.format(hours, minutes)
... 
>>> custom_format(timedelta(hours=9, minutes=46, seconds=4, microseconds=352515))
'9:46'
Run Code Online (Sandbox Code Playgroud)

此方法忽略该.days属性.如果您有超过24小时的timedeltas,请使用:

def custom_format(td):
    minutes, seconds = divmod(td.seconds, 60)
    hours, minutes = divmod(minutes, 60)
    formatted = '{:d}:{:02d}'.format(hours, minutes)
    if td.days:
        formatted = '{} day{} {}'.format(
            td.days, 's' if td.days > 1 else '', formatted)
    return formatted
Run Code Online (Sandbox Code Playgroud)

演示:

>>> custom_format(timedelta(days=42, hours=9, minutes=46, seconds=4, microseconds=352515))
'42 days 9:46'
>>> custom_format(timedelta(days=1, hours=9, minutes=46, seconds=4, microseconds=352515))
'1 day 9:46'
>>> custom_format(timedelta(hours=9, minutes=46, seconds=4, microseconds=352515))
'9:46'
Run Code Online (Sandbox Code Playgroud)