Nächsten Werktag berechnen

29/06/2014 - 15:00 von Stefan Baur | Report spam
Hallo,

ich suche eine Methode, den nàchsten Werktag zu einem übergebenen Termin
(als Zeitstempel in Sekunden seit Beginn der Unix-Zeitrechnung) zu
ermitteln.

Für Feiertage und Perl gibt es
https://metacpan.org/pod/Date::Holidays::DE
Das kann sogar regionale Feiertage nach Bundeslàndern ermitteln.
Soweit, so praktisch (wenn auch leider nicht als *.deb verfügbar).

Ich brauche aber ein
"next-workday $TIMESTAMP $BUNDESLAND $SAMSTAGWERKTAGJANEIN"
bei dem dann der entsprechend um n * 24h erhöhte Timestamp ausgegeben
wird, wenn $TIMESTAMP kein Werktag in diesem Bundesland und unter
Berücksichtigung von $SAMSTAGWERKTAGJANEIN ist.

Die Gemeinheit dabei ist der Faktor n.
Denn wenn für den jeweiligen Anwendungsfall der Samstag kein Werktag
sein soll, und der Freitag, auf den man zielt, ein Feiertag ist, dann
ist der nàchste Werktag regulàr der Montag - oder eben der Dienstag,
wenn Montag der nàchste Feiertag ist (Karfreitag/Ostermontag z.B.).

Gibt's da für irgendwo schon was fertiges, möglichst in Perl, Python
oder Bash? Pluspunkte, wenn es nur Dinge benötigt, die als *.deb
verfügbar sind.

Gruß
Stefan


Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@lists.debian.org
mit dem Subject "unsubscribe". Probleme? Mail an listmaster@lists.debian.org (engl)
Archive: https://lists.debian.org/53B00BA2.3070902@stefanbaur.de
 

Lesen sie die antworten

#1 Martin Klaiber
30/06/2014 - 19:30 | Warnen spam
Stefan Baur wrote:

Gibt's da für irgendwo schon was fertiges, möglichst in Perl, Python
oder Bash? Pluspunkte, wenn es nur Dinge benötigt, die als *.deb
verfügbar sind.



Ich kenne nichts Fertiges, aber warum schreibst Du Dir das - z.B. für
die bash - nicht selbst?

date kann Tage addieren und Wochentage ausgeben, der Wochentag von
morgen ist z.B.:

:~$ date -d +1day +%a
Di

Wenn Du wissen willst, ob es ein Feiertag ist, làsst Du Dir das Datum
ausgeben, z.B. so:

:~$ date -d +1day +%F
2014-07-01

Dann musst Du nur noch nachschauen, ob der 1.7.2014 ein Feiertag ist.
Die festen Feiertage sind ohnehin bekannt, für die beweglichen brauchst
Du die Osterformel, aus ihr leiten sich alle beweglichen Feiertage ab.
Die Formel findest Du im web, es gibt sogar fertigen bash-code:

<http://debianforum.de/forum/viewtopic.php?f4&t4038>

Das Ganze packst Du nun nur noch in eine while-Schleife: Solange der
Tag ein Sa oder So oder ein Feiertag ist, erhöhst Du den Wert für
"day". Zur Veranschaulichung: date soll so lange vorwàrts zàhlen, bis
es auf einen Sonntag trifft:

:~$ i=0 ; while [ $(date -d +"$i"day +%a) != "So" ] ; do (( i++ )) ; echo $i $(date -d +"$i"day +%a) ; done
1 Di
2 Mi
3 Do
4 Fr
5 Sa
6 So

Genauso prüfst Du gegen die Feiertage. Dafür làsst Du Dir z.B. die
Feiertage ebenfalls mit "+%F" ausgeben, also ebenfalls im Format:
Jahr-Monat-Tag, schreibst beides in einen string und kannst ganz
einfach vergleichen.

Der Rest ist nur noch ein bisschen Fleiß- und Schreibarbeit.

Ich habe mir mit date und etwas grep und sed einen ganzen Terminplaner
für die bash geschrieben ;-) Ist nicht der Schnellste, funktioniert
aber ansonsten einwandfrei. Vorallem aber habe ich jetzt endlich die
Funktionen drin, die mir wichtig sind :-)

Gruß, Martin


Zum AUSTRAGEN schicken Sie eine Mail an
mit dem Subject "unsubscribe". Probleme? Mail an (engl)
Archive: https://lists.debian.org/

Ähnliche fragen