[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: