Sonnenstand: ueber die Tagesgrenze rechnen statt abschneiden
Ein Versatz, der ueber Mitternacht hinausreicht, wurde bisher am Tagesrand abgeschnitten. Damit liessen sich "sechs Stunden vor Sonnenaufgang" oder "fuenf Stunden nach Sonnenuntergang" gar nicht mehr formulieren - solche Angaben sind aber gewollt und landen eben am Vorabend bzw. nach Mitternacht. Gerechnet wird jetzt modulo Tag. Verglichen wird die Uhrzeit innerhalb des Tages: ein Ziel jenseits von Mitternacht gilt als diese Uhrzeit am selben Tag. Bei "+" und "-" ist das genau der gemeinte Zeitpunkt, bei "ab" und "vor" verschiebt sich der wahre Bereich entsprechend mit - das steht so in der README. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -282,12 +282,16 @@ def bedingung_erfuellt(bedingung, state, wert, jetzt):
|
||||
# davor: ">=-" heisst "ab einer halben Stunde davor".
|
||||
versatz = minuten(soll)
|
||||
ziel = minuten(wert) + (-versatz if op.endswith("-") else versatz)
|
||||
# Ein Versatz kann rechnerisch ueber den Tagesrand rutschen
|
||||
# (Sonnenaufgang 05:34 minus sechs Stunden). Dann bleibt es beim
|
||||
# Tagesrand, statt auf die andere Seite von Mitternacht zu
|
||||
# springen - "kurz vor Sonnenaufgang" soll nicht ploetzlich
|
||||
# gestern abend bedeuten.
|
||||
ziel = max(0, min(1439, ziel))
|
||||
# Ueber den Tagesrand wird gerechnet, nicht abgeschnitten: "sechs
|
||||
# Stunden vor Sonnenaufgang" ist eine gewollte Angabe und landet
|
||||
# dann eben am Vorabend. Abgeschnitten waeren solche Faelle gar
|
||||
# nicht mehr formulierbar.
|
||||
#
|
||||
# Verglichen wird die Uhrzeit innerhalb des Tages. Ein Ziel
|
||||
# jenseits von Mitternacht gilt also als diese Uhrzeit am selben
|
||||
# Tag - bei "um" ist das genau der gemeinte Zeitpunkt, bei "ab"
|
||||
# und "vor" verschiebt sich der wahre Bereich entsprechend.
|
||||
ziel %= 1440
|
||||
jetzt_m = jetzt.hour * 60 + jetzt.minute
|
||||
if op.startswith(">="): return jetzt_m >= ziel
|
||||
if op.startswith("<"): return jetzt_m < ziel
|
||||
|
||||
Reference in New Issue
Block a user