我原本以为这个问题已经有了答案,但似乎并没有。在Python中,我想计算来自" now"的秒数。到了指定的时间"今天"或者"明天,"每当下一次发生时(例如,下一次发生在6:30 AM)。计划是倒数秒并在指定时间启动音乐闹钟。我是Python的新手,到目前为止,datetime
文档并没有帮助我。有人可以给我一些帮助吗?
答案 0 :(得分:6)
这应该做的工作:
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)
答案 1 :(得分: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)
datetime对象的格式为年,月,日,小时,分钟,秒,毫秒。
timedelta对象给出了天,秒,微秒的差异,因此对于这个例子,有一个8483秒直到630 am,这相当于大约2小时21分23秒。
答案 2 :(得分: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