Feierabend-Rechner in Python

Arbeit ist Arbeit! Will man das Optimum an Zeit aus der Arbeit ziehen, muss man einen Blick auf die gesetzlich geregelten "Zwangspausen" haben. Hier setzt der kleine "Feierabend-Rechner" an.

Die Aufgabenstellung besteht darin, die Anwesenheit optimal um die gesetzlichen Pausenzeiten herum zu optimieren.

Festlegung: * es existiert Gleitzeit; damit ein variabler Arbeitsbeginn * nach 8 Stunden muss eine halbe Stunde Pause gemacht werden * nach 9 Stunden muss eine weitere viertel Stunde als Pause gebucht werden * die Pausenzeiten werden automatisch gebucht

Also schöpft man den "normalen" Wochentag gut aus, wenn man unter 9:30 (inkl. 30 Minuten Mittagspause) und am Freitag, an dem jeder früher in's Wochenende Starten will, unter 6 Stunden bleibt.

Wer nicht jeden Tag mit dem Taschenrechner rumhantieren will, schafft vielleicht einfach wie folgt Abhilfe:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from datetime import datetime, timedelta

print("\n*** FEIERABEND ***\n")

now = datetime.now()
now_str = "{:02}:{:02}".format(now.hour, now.minute)

# input time
try :
        now_inp = raw_input("Arbeitsbeginn [{}]: ".format(now_str))
except:
        print("\nDann eben nicht!")
        raise SystemExit(1)

now_inp = now_inp.strip()

# check input
if now_inp != "":
        try:
                if len(now_inp) == 4:
                        hour = int(now_inp[0:2])
                        minute = int(now_inp[2:4])
                elif len(now_inp) == 5 and now_inp[2] == ":":
                        hour = int(now_inp[0:2])
                        minute = int(now_inp[3:5])
                else:
                        raise
                if hour < 1 or hour > 23 or minute < 0 or minute > 59: raise
        except:
                print("Fehler!!! Ungültige Eingabe")
                raise SystemExit(1)

        # reset time
        now = now.replace(hour = hour, minute = minute)

isFriday = True if now.date().weekday() == 4 else False
if (isFriday): print("Heute ist Freitag!!!")

if isFriday:
        delta = timedelta(hours = 6)
else:
        delta = timedelta(hours = 9, minutes = 30)

end = now + delta
print("Feierabend: {:02}:{:02}\n".format(end.hour, end.minute))

Was passiert hier? Zuerst mal wird die aktuelle Zeit erfasst und angezeigt.

Für den Fall, dass diese den Arbeitsbeginn markiert, kann einfach mit [ENTER] bestätigt werden. Sollte man mittels [Strg+C] die Eingabe beenden wollen, so passiert das hier etwas kontrollierter mit einer Ausgabe und einem gesteuerten Programmabbruch. Mit raise SystemExit erspare ich mir das Importieren von sys, um die Funktion exit aufrufen zu können; das kommt so auf's Selbe raus.

Anderenfalls muss die Zeit entsprechend angegeben werden. Das Format orientiert sich an dem vierstelligen Zeitformat mit trennendem Doppelpunkt, das alle kennen und nutzen. Zum Beispiel "12:34", was - zugegeben - ein recht fortgeschrittener Arbeitsbeginn wäre. Weil man ja nun täglich diesen vorzüglichen Rechner nutzt und der trennende Doppelpunkt in diesem Fall eher überflüssig ist, werden auch einfach vierstellige Zahl (ggf. mit führender Null) interpretiert. Daher der etwas kryptisch wirkende Block, in dem die Eingabe zerpflückt, geprüft und wieder zusammengesetzt wird.

Wenn der günstige Fall eingetreten ist, dass es Freitag ist und man ohnehin einen kurzen Arbeitstag vor sich hat, wird die Variable isFriday auf True gesetzt. Der "4te" Wochentag ist in Python der Freitag; es wird mit "1" von Montag an gezählt. Wenn Freitag ist, wird das natürlich auch gleich ausgegeben, damit man nicht versehentlich doch den Feierabend verpasst. ;-)

Anschließend wird die zeitliche Differenz ermittelt. An einem "normalen" Arbeitstag 9 Stunden und 30 Minuten und an einem kurzen Freitag besagte 6 Stunden.

Die finale Ausgabe markiert die Zeit, zu der sich die Tür der Firma hinter sich schließt, um keine wertvolle Pausenzeit buchen zu müssen. :-)