我正在尝试编写一个倒计时时钟脚本。我想在将来使用一个设定日期,并以可读的格式倒计时。小时,分钟,秒我打算打印到16x2的lCD显示器。我遇到的问题是尝试将日期之间差异的输出转换为漂亮的格式。到目前为止,我已经附上了我的内容。我收到错误:
AttributeError: 'datetime.timedelta' object has no attribute 'strftime'
这是我的代码:
from datetime import datetime
from time import strftime
deploy = datetime(2015, 3, 21, 0, 0)
mydate = datetime.now() - deploy
print (mydate.strftime("%b %d %H:%M:%S"))
我知道如何打印到我的LCD并创建一个循环,只需要帮助这部分。
答案 0 :(得分:3)
有两个问题:
timedelta
没有strftime()
方法的对象要修复它,convert deploy
from local timezone to UTC:
#!/usr/bin/env python
import time
from datetime import datetime, timedelta
deploy = datetime(2015, 3, 21, 0, 0) # assume local time
timestamp = time.mktime(deploy.timetuple()) # may fail, see the link below
deploy_utc = datetime.utcfromtimestamp(timestamp)
elapsed = deploy_utc - datetime.utcnow() # `deploy` is in the future
其中elapsed
是不计算闰秒的经过时间(例如2015-07-01 00:59:60 BST+0100
)。
有关time.mktime()
可能失败的详细信息,请参阅Find if 24 hrs have passed between datetimes - Python。
要将timedelta
转换为字符串,您可以使用str()
函数:
print(elapsed) # print full timedelta
# remove microseconds
trunc_micros = timedelta(days=elapsed.days, seconds=elapsed.seconds)
print(trunc_micros) # -> 20 days, 13:44:14 <- 17 chars
# remove comma
print(str(trunc_micros).replace(',', ''))
# -> 20 days 13:44:14 <- 16 chars
如果您需要其他格式,请使用divmod()
功能转换为小时,分钟,秒:
seconds = elapsed.days*86400 + elapsed.seconds # drop microseconds
minutes, seconds = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
print("{hours:02d}:{minutes:02d}:{seconds:02d}".format(**vars()))
# -> 493:44:14