繁体   English   中英

Python 以天、小时、分钟、秒表示的经过时间

[英]Python Elapsed Time as Days, Hours, Minutes, Seconds

我想以、小时、分钟和秒为单位测量一段代码的执行时间。 这是我到目前为止所拥有的:

import time
start_time = time.time()

# some code

elapsed = time.strftime("%H:%M:%S", time.gmtime(time.time() - start_time))
print(f"Took: {elapsed}")

问题是,如果我测量的代码花费的时间超过 24 小时,则显示的时间会溢出并再次从零开始。 我想要这样的东西:

# Example: 12 hours and 34 minutes should be printed as 
> Took: 12:34:00

# Example: 26 hours and 3 minutes should be printed as 
> Took: 1:02:03:00

time.gmtime(time.time() - start_time)的结果并不是你想象的那样。 它不是一个持续时间,而是一个时间点。 让我解释。

time.time()的结果是调用时自 1970 年 1 月 1 日 00:00:00 (UTC) 以来的秒数。 因此,语句time.time() - start_time将产生两次调用之间的秒数。 到目前为止,一切都很好。 但是, time.gmtime function 将此持续时间解释为自 1970 年 1 月 1 日 00:00:00 (UTC) 以来的秒数,并相应地格式化时间。 您所看到的是日期 1970 年 1 月 1 日 12:34:00 (UTC) 的时间部分。

我建议您使用datetime.timedelta object 并使用它来格式化,或者按照其他人的建议,output 以秒或毫秒为单位的持续时间。

如果你想自己格式化这个数字,你可以使用这样的东西:

def format_duration(duration):
    mapping = [
        ('s', 60),
        ('m', 60),
        ('h', 24),
    ]
    duration = int(duration)
    result = []
    for symbol, max_amount in mapping:
        amount = duration % max_amount
        result.append(f'{amount}{symbol}')
        duration //= max_amount
        if duration == 0:
            break

    if duration:
        result.append(f'{duration}d')

    return ' '.join(reversed(result))

您可以使用日期时间:

from datetime import datetime as dt

start = dt.fromtimestamp(1588432670)
end = dt.now()
elapsed=end-start
print("Took: %02d:%02d:%02d:%02d" % (elapsed.days, elapsed.seconds // 3600, elapsed.seconds // 60 % 60, elapsed.seconds % 60))

Output:

Took: 33:00:21:49

你应该试试这个:

import time
start_time = time.time()
...
elapsed_time = time.time() - start_time
days = 0
if elapsed_time >= 86400:
    days = int(elapsed_time / 86400)
elapsed = time.strftime("%H:%M:%S", time.gmtime(time.time() - start_time))
if days == 0:
    print(f"Took: {elapsed}")
else:
    print(f"Took: {days}:{eplased}")

  

尝试使用timeit:

import timeit
timeit.timeit(<callable function>, number = 100)

这里 timeit 将调用callable function number并为您提供平均运行时间。

时间类型只能包括小时和更少的单位。 您应该使用 datetime 而不是 time,如下所示:

from datetime import datetime
start_time = datetime.now()

# some code

elapsed = datetime.now() - start_time)
print(f"Took: {elapsed}")

日期时间的示例用法:

from datetime import datetime
d1 = datetime(2013,9,1,5,5,4)
d2 = datetime(2013,1,13,3,2,1)
result1 = d1-d2
print ('{} between {} and {}'.format(result1, d1, d2))

这将产生以下 output:

231 days, 2:03:03 between 2013-09-01 05:05:04 and 2013-01-13 03:02:01

暂无
暂无

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

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