首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python时钟

Python时钟
EN

Stack Overflow用户
提问于 2015-02-27 22:21:08
回答 1查看 5.3K关注 0票数 4

我正试着写一个倒计时脚本。我想在未来使用一个设定的日期,并让它以一种很好的可读的格式进行计数。时间,敏,证交会。我将打印到一个16x2 lCD显示器。我遇到的问题是如何将日期之间的差异的输出转换成一种很好的格式。到目前为止,我已经附上了我所拥有的东西。我收到错误:

代码语言:javascript
复制
AttributeError: 'datetime.timedelta' object has no attribute 'strftime' 

这是我的密码:

代码语言:javascript
复制
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和创建一个循环,只是需要帮助这一部分。

EN

回答 1

Stack Overflow用户

发布于 2015-02-28 07:31:47

有两个问题:

  • 如果将本地时间表示为天真的datetime对象,则如果相应的本地时间具有不同的utc偏移(例如,围绕DST转换),则时间差可能是不正确的。
  • 区别是没有timedelta方法的strftime()对象

要修复它, from local timezone to UTC

代码语言:javascript
复制
#!/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()函数:

代码语言:javascript
复制
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()函数将其转换为小时、分钟、秒:

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28775345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档