python - 我怎样才能把我的结束日期定在明天?尝试安排程序每天运行
问题描述
我需要此代码仅在上午 11:30(当天)至凌晨 3:30(第二天)之间运行。
我在使用此代码时遇到的问题是:当我打印d4
andd5
时,它会打印今天的日期。但是,d5
应该在第二天打印。我做了一些测试并改变了我的窗口时间。将开始时间设置为 23:59:00,将结束时间设置为 00:02:00。调度程序最终没有启动该过程。
这是我将结束时间设置为 00:02:00 时的控制台输出:
如果时间在同一天之内,则代码运行。所以开始时间 08:30 和结束时间 09:30。我怎样才能解决这个问题?
下面是我的 json 文件布局
timechanges":[{
"startTime":" 23:58:00",
"endTime":" 00:01:00"
import schedule
import time
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import date
class myproject():
def __init__(self):
today = date.today()
with open(root / 'time.json', "r") as rf:
decoded_data = json.load(rf)
for p in decoded_data['timechanges']:
startTime=p['startTime']
endTime=p['endTime']
d3 = today.strftime("%Y-%m-%d")
print("d3 =", d3)
d4 = d3+startTime
print("Start time:", d4)
d5 = d3+endTime
print("End time:",d5)
sched = BlockingScheduler()
job=sched.add_job(self.process, 'interval', minutes=2, start_date=d4, end_date=d5)
sched.start()
job.remove()
sched.shutdown()
print("Scheduler shut down")
def process(self):
print("running")
解决方案
使用datetime
andtimedelta
而不是字符串呢?如果 starttime > endTime,您可以在 endTime 的日期中添加一天。前任:
from datetime import datetime, timedelta
today = datetime.now()
startTime = "23:58:00"
endTime = "00:01:00"
startTime = datetime.combine(today.date(), datetime.strptime(startTime, "%H:%M:%S").time())
endTime = datetime.combine(today.date(), datetime.strptime(endTime, "%H:%M:%S").time())
if endTime < startTime:
endTime += timedelta(1) # add a day
print("today's date =", today.date())
# today's date = 2021-01-05
print("Start date/time:", startTime.isoformat(" "))
# Start date/time: 2021-01-05 23:58:00
print("End date/time:", endTime.isoformat(" "))
# End date/time: 2021-01-06 00:01:00
推荐阅读
- django - 以 django 形式访问 ebay 等产品子类别
- flutter - 如何将数据从 StatelessWidget 传递到 StatefulWidget
- linux - 在 windows linux 子系统的 VS Code 中打开时,如何防止 windows 无效文件名被重命名?
- java - Java Spring - 为什么自动装配的存储库在服务构造函数中为空?
- python - 为我的 Mac 安装 psycopg2 时出错
- python - python setup.py build ctypes.CDLL:无法打开共享对象文件:没有这样的文件或目录
- ios - Xcode:点击自动填充后关闭键盘
- memory-management - gSOAP 客户端和服务器(尤其是服务器)中的简单内存管理
- java - Java“最简单”的地图实现/链接地图(NOT LinkedHashMap)
- python - 如何使 itertools.product() 随机