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

问题描述 投票:2回答:3

我本以为这个问题已经有了答案,但似乎没有。在Python中,我想计算从“现在”到指定时间“今天”或“明天”,无论何时下一次发生(例如,下一次出现在6:30 AM)的秒数。计划是倒数秒并在指定时间启动音乐闹钟。我是Python的新手,到目前为止,datetime文档并没有帮助我。有人可以给我一些帮助吗?

python time timedelta
3个回答
7
投票

这应该做的工作:

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)

3
投票
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)

Notes

datetime对象的格式为年,月,日,小时,分钟,秒,毫秒。

timedelta对象给出了天,秒,微秒的差异,因此对于这个例子,直到630 am有8483秒,这相当于大约2小时21分23秒。


0
投票

那非常尖锐!现在整个事情,从上午/下午到剩下的几秒钟(可能有一种方法可以用更少的代码行完成这个,但是这样可行):

>>> 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)的时间。明天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
© www.soinside.com 2019 - 2024. All rights reserved.