使用timedelta时,小数位数过多

问题描述 投票:3回答:2

但是,我试图找到以小时和分钟为单位的时间,所以我知道如何做的唯一方法就是使用下面所做的事情。下面也是我的输出,如您所见,程序将返回秒以及后面的小数。

CODE:

def commercial_time (distance, speed_of_commercial):
    time = distance / speed_of_commercial
    seconds = time * 3600
    real = (datetime.timedelta(seconds = seconds))
    return real

输出:

9:46:04.352515

我的问题是,有没有办法摆脱那个“ .352515”?如果可能的话,我也想隐藏秒。

python python-3.x timedelta
2个回答
6
投票

手动格式化timedelta

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

演示:

>>> 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'

此方法确实忽略.days属性。如果您的时间增量超过24小时,请使用:

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

演示:

>>> 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'

0
投票

str()将时差转换为字符串,然后用.split('.')在小数点的任一侧分开。然后使用[0]将第一部分保留在小数点前:

您的示例与最后一行唯一的不同:

import time
import datetime

def commercial_time (distance, speed_of_commercial):
    time = distance / speed_of_commercial
    seconds = time * 3600
    real = (datetime.timedelta(seconds = seconds))
    return str(real).split('.')[0]

然后:

print( commercial_time( 10 , 1.025 ) )

生成:

9:45:21
© www.soinside.com 2019 - 2024. All rights reserved.