繁体   English   中英

有没有办法将 timedelta object 格式化为 hours-minutes-seconds.MILLISECONDS?

[英]Is there a way to format a timedelta object to be hours-minutes-seconds.MILLISECONDS?

我有这样的事情:

import datetime

a = datetime.datetime.now()
do_something_for_a_long_time()
b = datetime.datetime.now()
c = b - a

print("Doing <something> took {c}".format(c))

问题是这很好用,但我们希望秒值是形式,而不是微秒?

我能够从那个 timedelta object 中分离出毫秒属性,它似乎只有微秒可用。

鉴于您的初始代码示例,您可以使用如下内容:

# From your example.
c = b - a

# Get the hours, minutes, and seconds.
minutes, seconds = divmod(c.seconds, 60)
hours, minutes = divmod(minutes, 60)

# Round the microseconds to millis.
millis = round(c.microseconds/1000, 0)

print(f"Doing <something> took {hours}:{minutes:02}:{seconds:02}.{millis}")

这导致

# c = datetime.timedelta(seconds=7, microseconds=319673)
Doing <something> took 0:00:07.320

看看 Python 的内置函数round()divmod()并请戳一下这个这个相关的线程; 另外,请通读主题和主题以了解有关格式化timedelta对象的更多信息。

如果您不想手动四舍五入,只需去掉微秒的最后三位数字:

def format_time():
t = datetime.datetime.now()
s = t.strftime('%Y-%m-%d %H:%M:%S.%f')
return s[:-3] `def format_time():
t = datetime.datetime.now()
s = t.strftime('%Y-%m-%d %H:%M:%S.%f')
return s[:-3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM