gpt4 book ai didi

Python strftime 时钟

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:29 30 4
gpt4 key购买 nike

我正在尝试编写一个倒计时时钟脚本。我想在未来使用一个设定的日期,并以一种易于阅读的格式倒计时。小时,分钟,秒。我要打印到 16x2 液晶显示器。我遇到的问题是试图将日期之间的差异的输出转换为一种很好的格式。我附上了到目前为止的内容。我收到错误:

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 并创建一个循环,只需要这部分的帮助。

最佳答案

有两个问题:

  • 如果您使用表示为原始日期时间对象的本地时间,如果相应的本地时间具有不同的 utc 偏移量,例如,围绕 DST 转换,则时差可能不正确
  • 区别在于 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

关于Python strftime 时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28775345/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com