【发布时间】:2020-08-29 06:02:34
【问题描述】:
我有一个列表,其中包含类似 ['13:45','12:30','11:40'] 的字符串格式的时间。因此,脚本应该在字符串格式列表中选择最早的时间并等到那个时间出现。代码的第一部分,选择最小值可以用 min 函数完成。如何让它等到那个时候?
而且,如果时间提到了至少一个已经完成(过去),那么它应该选择下一个最低的。
【问题讨论】:
我有一个列表,其中包含类似 ['13:45','12:30','11:40'] 的字符串格式的时间。因此,脚本应该在字符串格式列表中选择最早的时间并等到那个时间出现。代码的第一部分,选择最小值可以用 min 函数完成。如何让它等到那个时候?
而且,如果时间提到了至少一个已经完成(过去),那么它应该选择下一个最低的。
【问题讨论】:
这个问题有一个细微差别:当列表中的最短时间小于当前时间。在这种情况下,最合理的方法是睡到列表中最小的时间明天。例如,让我们考虑当前时间 23:59 和 tl = [00:10, 01:30],那么脚本应该休眠到 00:10(明天)。
解决办法如下:
import time
from datetime import datetime
from datetime import timedelta
from dateutil import parser
now = datetime.now()
def parse_times(tl):
for t in tl:
parsed_time = parser.parse(t)
if parsed_time > now:
yield parsed_time
else:
yield parsed_time + timedelta(days=1)
tl = ['13:45', '12:30', '11:40']
parsed_times = parse_times(tl)
next_time = min(parsed_times)
time.sleep((next_time - now).total_seconds())
【讨论】:
tl?
类似的东西呢:
from time import sleep
from datetime import datetime
tl = ['13:45','12:30','11:40']
## remove times less or equal current time, then get minimum
t = min(el for el in tl if el > datetime.now().strftime('%H:%M'))
## sleep until we pass the minimum time
## we check this every second
while t > datetime.now().strftime('%H:%M'):
sleep(1)
【讨论】:
t=min(el for el in l if el > datetime.now().strftime('%H:%M')),计算秒数差异并等待该秒数
[]你添加了一个生成器而不是一个列表
[] 有什么问题?两者都返回正确的最小值。