Jeder Tag hat ein festes Zeitfenster: 9:00 bis 13:00 Uhr (im lokale Zeitzone des Benutzers).
Wenn die aktuelle Zeit außerhalb dieses Fensters liegt:
Vor 9:00 Uhr: Auf 9:00 Uhr + Intervall einstellen.
Nach 13:00 Uhr: Planen für den nächsten Tag 9:00 Uhr + Intervall.
Das Planungssystem sollte nur für drei aufeinanderfolgende Tage funktionieren.
Wenn die Planung das Fenster des dritten Tages (13:00 Uhr) überschreitet, sollte sie bei 1 angehalten oder begrenzt werden: 00 Uhr am dritten Tag.
Ich muss die nächste geplante Zeit in UTC berechnen, aber alle Vergleiche müssen in der lokalen Zeitzone des Benutzers erfolgen. Ich habe eine Funktion implementiert, aber die Logik für den Übergang zum Fenster des nächsten Tages und das Stoppen am dritten Tag funktioniert nicht richtig.
Hier ist der Kern meiner aktuellen Implementierung:
Code: Select all
def get_next_scheduled_time(country, interval_seconds=20):
tz_name = time_zone_mapping.get(country, "UTC")
timezone = pytz.timezone(tz_name)
now_local = datetime.now(pytz.utc).astimezone(timezone)
base_time = timezone.localize(datetime(now_local.year, now_local.month, now_local.day, 9, 0, 0))
end_time = timezone.localize(datetime(now_local.year, now_local.month, now_local.day, 13, 0, 0))
staggered_time = now_local + timedelta(seconds=interval_seconds)
if staggered_time < base_time:
staggered_time = base_time + timedelta(seconds=interval_seconds)
elif base_time max_scheduled_time:
staggered_time = timezone.localize(max_scheduled_time).astimezone(timezone)
return staggered_time.astimezone(pytz.utc).strftime("%Y-%m-%dT%H:%M:%S+00:00")
Nach dem Übergang überspringt er manchmal den definierten Tag oder überschneidet sich mit diesem Zeitfenster.
Ich bin mir nicht sicher, ob ich timedelta(days=...) oder timedelta(hours=...) für Tagesübergänge verwenden soll, um eine präzise Kontrolle zu gewährleisten.
Gewünschte Ausgabe:
Wenn der aktuelle Wenn die Zeit an Tag 1 außerhalb des Zeitfensters liegt, planen Sie sie für 9:00 Uhr von Tag 2 ein.
Wenn das Zeitfenster von Tag 3 überschritten wird, begrenzen Sie die Planung auf 13:00 Uhr an Tag 3.
Alle Planungsberechnungen sollten Beachten Sie die lokale Zeitzone, aber die Ausgabe muss in UTC erfolgen.
Wie kann ich diese Logik korrigieren, um ordnungsgemäße Übergänge von Tag zu Tag und die strikte Einhaltung von Zeitfenstern sicherzustellen?