如何解决减去转换为日期时间对象的字符串
我有一段代码,它在 24 小时内进行输入,例如 23:59
,并打印出还剩多少时间,所以如果是早上 11:59,它会返回 12 小时。
到目前为止我已经能够做到这一点,但我现在无法判断这段代码出了什么问题:
from datetime import datetime
def timeuntil(t):
time = t
future = datetime.strptime(time,'%H:%M').replace(day = datetime.now().day,year = datetime.now().year,month = datetime.now().month)
timeleft = (future - datetime.now())
return timeleft
供您参考,当我在晚上 8:43 运行它时,print(timeuntil(22:00))
返回了 15:55:01.996377
。
感谢您的帮助。
解决方法
该问题在我的机器上似乎无法重现,即使在您指定的时间定义 datetime
对象时也是如此。但是,这可能与 replace()
上的 datetime
相关。
确实没有必要这样做,我认为您最好正确创建一个 datetime
对象。下面解决了问题并按您的预期工作。
def timeuntil(begin):
hour,minute = map(int,begin.split(':'))
now = datetime.now()
future = datetime(now.year,now.month,now.day,hour,minute)
return (future - now)
print(timeuntil("23:59"))
#7:35:06.022166
如果您想指定一个不同的时区来运行它,我们可以用一个时区定义我们的 datetime.now()
,但是我们需要去掉它来计算 future - now
。
def timeuntil(begin):
hour,begin.split(':'))
now = datetime.now(timezone('US/Pacific')).replace(tzinfo=None)
future = datetime(now.year,minute)
return (future - now)
,
我相信您想要到达第二天的秒数。我发现使用时间模块和直接计算更容易理解这一点。
import time
secs_in_day = 60*60*24
secs_time_left_local = secs_in_day - (time.time() - time.altzone) % secs_in_day
hours = int(secs_time_left_local // 3600)
minutes = int((secs_time_left_local % 3600) // 60)
seconds = int((secs_time_left_local % 3600) % 60)
print(f'{hours:02}:{minutes:02}:{seconds:02}')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。