Re: Nächsten Werktag berechnen
Martin Klaiber <martinkl@zedat.fu-berlin.de> wrote:
> 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:
Nachtrag: Statt der Osterformel kann man auch ncal -e verwenden. Hat
nur leider den Nachteil, dass die Ausgabe lokalisiert ist und date -d
das Format dann nicht mehr versteht.
Aber so geht es (quick & dirty hack):
-------------------- schnipp --------------------
#!/bin/bash
ostersonntag()
{
local LANG=C
ostern=$(ncal -e)
}
ostersonntag
# Feste Feiertage:
neujahr="01-01"
t_arbeit="05-01"
t_einheit="10-03"
weih_1="12-25"
weih_2="12-26"
# Bewegliche Feiertage:
k_freitag=$(date -d "$ostern - 2 days" +%m-%d)
o_montag=$(date -d "$ostern + 1day" +%m-%d)
himmel=$(date -d "$ostern + 39 days" +%m-%d)
p_montag=$(date -d "$ostern + 50 days" +%m-%d)
feiertage=$(echo $neujahr $t_arbeit $t_einheit $weih_1 $weih_2 $k_freitag $o_montag $himmel $p_montag)
weiter=0
t=1
while [ $weiter -lt 1 ]
do
weiter=1
tag=$(date -d +"$t"day +%m-%d)
wotag=$(date -d +"$t"day +%a)
if [ "$wotag" == "Sa" ] || [ "$wotag" == "So" ] ; then
weiter=0
(( t++ ))
else
for f in $feiertage
do
if [ "$tag" == "$f" ] ; then
weiter=0
(( t++ ))
fi
done
fi
done
echo "Der nächste Werktag ist $(date -d +"$t"day +%a)"
-------------------- schnapp --------------------
Test:
martinkl@mort:~$ werktag
Der nächste Werktag ist Mi
Probeweise die Feiertagsliste ergänzen, um die Feiertagserkennung zu
verifizieren:
feiertage=$(echo $neujahr $t_arbeit $t_einheit $weih_1 $weih_2 $k_freitag $o_montag $himmel $p_montag "07-02" "07-03" "07-04")
martinkl@mort:~$ werktag
Der nächste Werktag ist Mo
Funktioniert also auch. Natürlich trotzdem ohne Gewähr.
Gruß, Martin
Reply to: