python - 如何睡到特定时间 YYYY-MM-DD HH:MM:SS?
问题描述
我一直在考虑做一个睡眠功能,它会一直睡到某个日期被调用。我的想法基于日期,例如:2019-01-20 12:00:00。
我还没有真正想出如何开始解决这个问题。我的想法是类似的,例如
if there is a date given:
time.sleep(until the date and time)
所以问题是我怎么可能睡到 2019-01-20 12:00:00 的特定时间?
解决方案
简单,计算它有多长时间,然后睡觉。
您可以计算达到唤醒时间并在增量时间内休眠所需的时间。
Python 可以计算时间间隔。如果你从另一个中减去一个时间戳,那么你会得到datetime.timedelta
:
import datetime
import time
target = datetime.datetime(2019,1,20,12,0,0)
now = datetime.datetime.now()
delta = target - now
if delta > datetime.timedelta(0):
print('will sleep: %s' % delta)
time.sleep(delta.total_seconds())
print('just woke up')
当然,你可以把它放在一个函数中:
import datetime
import time
target = datetime.datetime(2019,1,20,12,0,0)
def sleep_until(target):
now = datetime.datetime.now()
delta = target - now
if delta > datetime.timedelta(0):
time.sleep(delta.total_seconds())
return True
sleep_until(target)
您可以检查返回值:仅当它休眠时,它才返回 True。
顺便说一句:没关系,使用过去的日期作为目标。这将产生一个负数的秒数。睡一个负值就不会睡。
如果你的时间是一个字符串,使用这个:
target = datetime.datetime.strptime('20.1.2019 20:00:00', '%d.%m.%Y %H:%M:%s')
或者
target = datetime.datetime.strptime('2019-1-20 20:00:00', '%Y-%m-%d %H:%M:%s')
推荐阅读
- http - 限制访问 index.html 和 http 服务器中的其他文件
- android - 已解决 - 如何在 Android 上解决此编译问题?
- vb.net - 在不进行 ToString 转换的情况下检查 OracleParameter.Value 是否为 Null
- typescript - Vue组件无法解析打字稿中的相对组件导入
- angular - “文件”类型上不存在属性“arrayBuffer”
- opencart - Opencart 结帐页面上的自定义输入字段:3
- python - 使用 numpy.ndarray 填充数据框中的缺失值
- powershell - 用于从 servicenow 更新 ldap 数据的 Powershell 脚本
- javascript - 从 CDN 导入 Materializecss 并让选择下拉菜单在 ReactJS 中工作?
- typescript - 为什么将不可为 null 的值设置为 null 时 TypeScript 不发出警告?