如何在 python 中获取两位数 (00.00.00) 的小时格式?

How to get hour format in two digit (00.00.00) in python?

下面是我在我的一个应用程序中使用的示例代码。我希望默认小时格式为 00(例如 02:30:35),在这里我得到的是 0:00:03.011445,所以我使用的是 strftime,但我在那里遇到了另一个异常。请指导一下。

from datetime import datetime
from datetime import time
from time import strftime
import time

start = datetime.now()
time.sleep(3)
end = datetime.now()

print(start)
print(end)
dt = (end - start)
print('Defual Time:', dt)

print('New Format DateTime', dt.strftime("%m/%d/%y %H:%M:%S"))

我低于输出。

2020-10-17 19:15:36.831928
2020-10-17 19:15:39.843373
Defualt Time: 0:00:03.011445
Traceback (most recent call last):
  File "D:/New folder/IoT2.py", line 30, in <module>
    print('New Format DateTime', dt.strftime("%m/%d/%y %H:%M:%S"))
AttributeError: 'datetime.timedelta' object has no attribute 'strftime'

你可以从 datetime.timedelta 中得到秒数和天数,所以你可以做这样的事情!

from datetime import datetime
import time

start = datetime.now()
time.sleep(3)
end = datetime.now()

print(start)
print(end)
dt = (end - start)
print('Default Time:', dt)

def days_hours_minutes(td):
    x = (td.days, td.seconds//3600, (td.seconds//60)%60, td.seconds)
    return x #(days, hrs, mins, seconds)

print('New Format DateTime', days_hours_minutes(dt))

您可以使用timedelta对象的方法total_seconds,自行计算出各自的时分秒,然后您可以根据需要格式化输出字符串。

from datetime import datetime
from datetime import time
from time import strftime
import time

start = datetime.now()
time.sleep(3)
end = datetime.now()

print(start)
print(end)
dt = (end - start)
print('Defual Time:', dt)

dt_sec=dt.total_seconds()
hours,rem=divmod(dt_sec,3600)
minutes,rem=divmod(rem,60)

print('New Format DateTime', f'{hours:0>2.0f}:{minutes:0>2.0f}:{rem:0>2.0f}:'+f'{rem:.3f}'[-3:])

编辑

我还添加了毫秒的打印。

您收到属性错误的原因是因为 strftime 属于 datetime.datetime class(来自 datetime.now())而不是 datetime.timedelta class(来自 end-start)。

相反,您实际上可以使用 total_seconds() 方法来获取时差的秒数,并根据需要将其格式化为字符串。

编辑:您可以使用timedeltamicroseconds属性来计算您的毫秒数并将其格式化以显示。

from datetime import datetime
from datetime import time
from time import strftime
import time

start = datetime.now()
time.sleep(3)
end = datetime.now()

print(start)
print(end)
dt = (end - start)
print('Default Time:', dt)

milliseconds = int(round(dt.microseconds/1000, 1))

dt = int(dt.total_seconds())

print('New format: {:02}:{:02}:{:02}:{:03}'.format(dt // 3600, dt % 3600 // 60, dt % 60, milliseconds))

此输出为:

2020-10-19 13:02:13.861103
2020-10-19 13:02:16.863268
Default Time: 0:00:03.002165
New format: 00:00:03:002