计算从现在到今天或明天指定时间的秒数

Calculate seconds from now to specified time today or tomorrow

我本以为这个问题已经有了答案,但似乎没有。在 Python 中,我想计算从 "now" 到指定时间 "today" 或 "tomorrow," 下一次出现的秒数(例如,下一次出现 6:30上午)。计划是倒数秒,并在指定时间发出音乐警报。我是 Python 的新手,到目前为止 datetime 文档还没有帮助我解决这个问题。有人可以帮我解决这个问题吗?

In [12]: dt = datetime.datetime.now()
Out[13]: datetime.datetime(2016, 4, 23, 4, 8, 36, 742436)

In [14]: six_thirty = datetime.datetime(2016, 4, 23, 06, 30, 0, 0)

In [15]: six_thirty - dt
Out[15]: datetime.timedelta(0, 8483, 257564)

备注

日期时间对象的格式为年、月、日、时、分、秒、毫秒。

timedelta 对象给出了以天、秒、微秒为单位的差异,因此对于这个例子,到早上 630 点还有 8483 秒,这相当于大约 2 小时 21 分 23 秒。

这应该可以完成工作:

from datetime import datetime, timedelta

now = datetime.now()
(timedelta(hours=24) - (now - now.replace(hour=6, minute=30, second=0, microsecond=0))).total_seconds() % (24 * 3600)

太犀利了!现在对于整个事情,从 AM/PM 时间到剩余秒数(可能有一种方法可以用更少的代码行来做到这一点,但这很有效):

>>> from datetime import datetime, timedelta
>>> futime = '10:30 AM'
>>> fustrip = futime.rstrip(' AM')
>>> fusplit = fustrip.split(':')
>>> hr = int(fusplit[0])
>>> min = int(fusplit[1])
>>> now = datetime.now()
>>> secsleft = int((timedelta(hours=24) - (now - now.replace(hour=hr, minute=min, second=0, microsecond=0))).total_seconds() % (24 * 3600))
>>> secsleft
2063

这就是今天的时间 (10:30 AM)。对于明天 6:30,它也有效:

>>> hr = 6
>>> secsleft = int((timedelta(hours=24) - (now - now.replace(hour=hr, minute=min, second=0, microsecond=0))).total_seconds() % (24 * 3600))
>>> secsleft
74063