首页 > 解决方案 > 我怎样才能把我的结束日期定在明天?尝试安排程序每天运行

问题描述

我需要此代码仅在上午 11:30(当天)至凌晨 3:30(第二天)之间运行。

我在使用此代码时遇到的问题是:当我打印d4andd5时,它会打印今天的日期。但是,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")

标签: pythondatetimepython-datetime

解决方案


使用datetimeandtimedelta而不是字符串呢?如果 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

推荐阅读