问题描述
以下是我在其中一个应用程序中使用的示例代码。我希望默认小时格式为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
类(来自datetime.now()
)而不是datetime.timedelta
类(来自end-start
)。
实际上,您实际上可以使用total_seconds()
方法来获取时差的秒数,并根据需要将其格式化为字符串。
编辑:您可以使用microseconds
的{{1}}属性来计算毫秒并设置其格式以显示。
timedelta
此输出为:
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))