Bibliothek für Zeiträume (kein timedelta)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
grubenfox
User
Beiträge: 422
Registriert: Freitag 2. Dezember 2022, 15:49

Moin alle zusammen,

bevor ich jetzt selbst in die Tasten haue, wollte ich mal fragen ob es für mein Problem schon irgendwo etwas fertiges bzw. nutzbares gibt..

ich habe mir zum Beispiel irgendwie zwei Zeiträume erzeugt:
* der eine mit dem Namen 'Frühschicht' ist Montags/Dienstags/.../Freitags von 04:00 bis 06:00
* der zweite: Name 'Normal' und gilt auch von Montags bis inkl. Freitags von 06:00 bis 16:00

und da möchte ich nun Abfragen machen: z.B. für einen Zeitraum Arbeitszeit am Dienstag von 05:00 bis 13:00 und als Ergebnis käme dann so etwas wie {Frühschicht': 1 Stunde; 'Normal: 7 Stunden} bei raus.
Also im Prinzip so etwas wie Schnittmengen zwischen Zeiträumen (an verschiedenen Wochentagen)

Ist die Beschreibung so weit verständlich?

Ich habe mangels guter Ideen jetzt nur kurz bei NumPy und Pandas geschaut. Pandas dataframe-Methode .between_time() geht laut der Beschreibung wohl schon ungefähr in die richtige Richtung:
https://de.acervolima.com/python-pandas ... ween_time/

Das obige Beispiel wäre dann:
zwei dataframes erzeugen und dann auf jedem dataframe die Methode between_time('05:00', '13:00') aufrufen und alles was dabei hinten raus fällt ist das das gesuchte Ergebnis. Aber ich bin nicht sicher ob jetzt das Beschäftigen mit Pandas und dessen Dataframes für mich so zielführend ist.
Vielleicht gibt es ja da draußen schon irgendetwas, das besser geeignet ist.... nur ich kenne es (noch) nicht.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Um zu wissen, was besser geeignet ist, müßten wir noch wissen, was eigentlich das Ziel ist. between_times prüft ja nur, ob ein Zeitpunkt im gegebenen Zeitraum ist, Du hast aber zwei Zeiträume, bestehen aus jeweils zwei Zeitpunkten.
Diese Zeitpunkte kann man durch datetime.time darstellen, fuehschicht_start/ende, arbeitszeit_start/ende; und durch <-Vergleiche kannst Du dann den Überlappbereich berechnen.
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

grubenfox hat geschrieben: Freitag 2. Dezember 2022, 16:54 ich habe mir zum Beispiel irgendwie zwei Zeiträume erzeugt:
* der eine mit dem Namen 'Frühschicht' ist Montags/Dienstags/.../Freitags von 04:00 bis 06:00
* der zweite: Name 'Normal' und gilt auch von Montags bis inkl. Freitags von 06:00 bis 16:00
Das wird sicher lustig zu berechnen, wenn jemand genau bis 06:00 Arbeitet. Bei einem unglücklich gewählten vergleichen,hat der dann 0 Stunden normal gearbeitet. Vielleicht ist es besser, wenn die Frühschicht nur bis 05:59:59 geht, um keine Überlappung zu haben.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@imonbln: und was ist mit 05:59.59.3? Es ist nie sinnvoll, von einem Wert ein Epsilon abzuziehen, um angebliche Probleme mit Ranges zu lösen. Man muß einfach nur klar definieren, ob der angegebene Range inklusive oder exklusive gemeint ist. Der Fall 0 Stunden läßt sich ja einfach abfragen.
narpfel
User
Beiträge: 644
Registriert: Freitag 20. Oktober 2017, 16:10

Wenn man das selbst schreibt, sollte man auch immer den Wechsel zwischen Normal- und Sommerzeit bedenken (und, wenn man es ganz korrekt haben will, Schaltsekunden).
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Umstellung der Sommer- und Winterzeit findet ja immer nur Sonntags statt und letztere sind ja zum Glück abgeschafft.
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntage sind abgeschafft? 😱
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
grubenfox
User
Beiträge: 422
Registriert: Freitag 2. Dezember 2022, 15:49

Sirius3 hat geschrieben: Freitag 2. Dezember 2022, 17:13 between_times prüft ja nur, ob ein Zeitpunkt im gegebenen Zeitraum ist, Du hast aber zwei Zeiträume, bestehen aus jeweils zwei Zeitpunkten.
Diese Zeitpunkte kann man durch datetime.time darstellen, fuehschicht_start/ende, arbeitszeit_start/ende; und durch <-Vergleiche kannst Du dann den Überlappbereich berechnen.
also so wie ich das bei Pandas verstanden habe prüft between_times dort nicht nur einen Zeitpunkt, sondern filtert die Daten und liefert nur die Daten zurück die innerhalb des Überlappbereichs liegen. Andere between_times-Methoden in anderen Modulen mögen da anders arbeiten....

Und bevor ich anfange über Sommer-/Winter-Normalzeit-Wechseln und inklusive und exklusive Grenzen nachzudenken, wollte ich mal wissen ob da mittlerweile schon was etabliertes vorhanden ist.

Ich habe jetzt vor 2 Jahren erst wieder langsam mit Python (3.x) angefangen, davor waren 8 Jahre in denen ich die Python_Entwicklung nicht weiter verfolgt hatte (im Zweifel hatte ich nur meine alten Python 2.x-Programme genutzt die einfach das machten was ich da zusammen programmiert hatte). So sind viele Änderungen/Neuerungen bislang an mir vorüber gegangen (z.b. Typing) und mein selbst geschriebener Code würde sehr altmodisch aussehen. Daher die leise Hoffnung dass es da vielleicht was modernes gibt, das dann irgendwelche neumodischen Dinge nutzt die mir noch völlig fremd sind...

Diese Probleme mit sich überlappenden Zeiträumen , Sommer/Winterzeit-Umstellungen usw. existieren ja nicht erst seit diesem Jahr. :)
(und im Zweifel ist die Sonntagsarbeit auch noch nicht abgeschafft.)
Antworten