使用timedelta时,小数位数过多
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用timedelta时,小数位数过多相关的知识,希望对你有一定的参考价值。
但是,我试图找到以小时和分钟为单位的时间,所以我知道如何做的唯一方法就是使用下面所做的事情。下面也是我的输出,如您所见,程序将返回秒以及后面的小数。
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”?如果可能的话,我也想隐藏秒。
答案
手动格式化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'
另一答案
用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
以上是关于使用timedelta时,小数位数过多的主要内容,如果未能解决你的问题,请参考以下文章