Seite 1 von 1
Wiederholungen im Zeitraum prüfen
Verfasst: Mo 18. Aug 2025, 09:49
von StefKe
Hallo allerseits, gibt es eine Möglichkeit die Anzahl von Wiederholungen in einem Zeitraum zu ermitteln?
Zum Beispiel:
- Messung - Beginn: 17.08.2025 14:59:27
Messung - Ende: 18.08.2025 19:21:00
erstes Ereignis: 15:00 Uhr
Wiederholung: alle 6 Stunden
Im obigen Beispiel sollte 5x im Ergebnis stehen.
Mir fehlt grad jeglicher Formelansatz, vermutlich lässt sich das nur als Makro lösen?
Danke - Stefan
Re: Wiederholungen im Zeitraum prüfen
Verfasst: Mo 18. Aug 2025, 13:21
von karolus
StefKe hat geschrieben: ↑Mo 18. Aug 2025, 09:49
…vermutlich lässt sich das nur als Makro lösen?
Danke - Stefan
Re: Wiederholungen im Zeitraum prüfen
Verfasst: Mo 18. Aug 2025, 21:13
von StefKe
Hallo, das trifft es leider nicht - siehe Beispiel:
Sobald die Summe vor der ersten und der letzten Bewässerungsperiode über 6 Stunden beträgt, ist das Ergebnis leider falsch.
Die Messung in Zeile 8 ist nicht sinnvoll, aber das Ergebnis sollte 0 sein.
Re: Wiederholungen im Zeitraum prüfen
Verfasst: Mo 18. Aug 2025, 22:55
von karolus
Hallo
Code: Alles auswählen
=LET( a; OBERGRENZE(A6-1/8;1/4)+1/8 ; e; UNTERGRENZE(B6+1/8;1/4)-1/8 ; WENN(e<a ; 0 ; 1+(e-a)*4))
Re: Wiederholungen im Zeitraum prüfen
Verfasst: Mi 20. Aug 2025, 10:23
von StefKe
Hallo, bei der Formel streikt Calc -
habe das jetzt so gelöst:
Code: Alles auswählen
import datetime as dt
def count_steps():
start_datetime = "11.08.2025 13:14:45"
stop_datetime = "12.08.2025 13:19:21"
start_time = "15:00"
step = 6 # Dauer zwischen jeder Wiederholung in Stunden
sum_steps = 0
start_date = start_datetime[:11]
start_step = dt.datetime.strptime(f"{start_date} {start_time}","%d.%m.%Y %H:%M")
stop = dt.datetime.strptime(stop_datetime,"%d.%m.%Y %H:%M:%S")
delta = dt.timedelta(hours=step)
while start_step < stop:
start_step += delta
sum_steps += 1
print(start_step)
print(sum_steps)
if __name__ == "__main__":
count_steps()
passt auch - Danke für Deine Mühe
Stefan
Re: Wiederholungen im Zeitraum prüfen
Verfasst: Mi 20. Aug 2025, 15:55
von karolus
StefKe hat geschrieben: ↑Mi 20. Aug 2025, 10:23
Hallo, bei der Formel streikt Calc -
das kann jetzt daran liegen:
- du benutzt eine LO-version vor LO24.8 (da gabs LET noch nicht!)
- du hast unter Optionen umgeschaltet auf [x]englische Funktionsnamen
StefKe hat geschrieben: ↑Mi 20. Aug 2025, 10:23
habe das jetzt so gelöst:
Code: Alles auswählen
import datetime as dt
def count_steps():
start_datetime = "11.08.2025 13:14:45"
stop_datetime = "12.08.2025 13:19:21"
start_time = "15:00"
step = 6 # Dauer zwischen jeder Wiederholung in Stunden
sum_steps = 0
start_date = start_datetime[:11]
start_step = dt.datetime.strptime(f"{start_date} {start_time}","%d.%m.%Y %H:%M")
stop = dt.datetime.strptime(stop_datetime,"%d.%m.%Y %H:%M:%S")
delta = dt.timedelta(hours=step)
while start_step < stop:
start_step += delta
sum_steps += 1
print(start_step)
print(sum_steps)
if __name__ == "__main__":
count_steps()
passt auch - Danke für Deine Mühe
Stefan
Das funktioniert aber nur für die beiden im Code
hart-codierten Daten, das geht schon besser,
unter der Voraussetzung das du zuerst den Zellbereich mit den Start- und Enddatum und einer leeren Spalte daneben für die Ergebnisse selektierst
Code: Alles auswählen
from datetime import datetime as dt, timedelta as delta
LO_EPOCH = dt(1899, 12, 30)
SECS_PER_DAY = 24*60*60
def py_date(lo_date):
lo_date, lo_time = divmod(lo_date, 1)
_seconds = lo_time * SECS_PER_DAY
h_m, _seconds = divmod(_seconds, 60)
_hours, _minutes = divmod(h_m, 60)
return LO_EPOCH + delta(days=lo_date, hours=_hours,
minutes=_minutes, seconds=_seconds)
def count_events( start, end, events):
for hour in events:
if start < (first:=start.replace(hour=hour,minute=0,second=0)):
first = first
break
c = 0
while first < end:
first+=delta(hours=6)
c+=1
return c
def main():
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
data = sel.DataArray
dates = [row[:2] for row in data]
events = [3, 9, 15, 21]
sel.DataArray = [( a, e, count_events(py_date(a), py_date(e), events))
for a, e in dates]
edit: update 26.8.2025 11:00:
ich merke gerade das »timedelta« nicht nur int's verarbeitet sondern auch float's, damit reduziert sich die Umrechnung auf:
Code: Alles auswählen
def py_date(lo_date):
return LO_EPOCH + delta(days=lo_date)
das ist dann eigentlich zu wenig um dafür ne extra Funktion zu schreiben!
Re: Wiederholungen im Zeitraum prüfen
Verfasst: Mo 25. Aug 2025, 09:28
von StefKe
Hallo, danke - läuft

Ich hab das Skript erst mal Schritt für Schritt laufen lassen, um den Ablauf zu verstehen.
PS: die Schreibweise:
wählst Du, um die Variable von dem reservierten Wort
abzugrenzen?
Stefan
Re: Wiederholungen im Zeitraum prüfen
Verfasst: Mo 25. Aug 2025, 14:29
von karolus
Hallo
Ich hab nirgends »_datetime« verwendet, was ich verwendet habe sind die lokalen Variablen in der Funktion »py_date« : »_hours«, »_minutes« und »_seconds« um dem Leser zu vermitteln, das ein semantischer Unterschied zu den key-worten in der »delta( … , … , …)« funktion besteht.