Berechnung dt. Feiertage und Darstellung (Qt)

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
THinhK
User
Beiträge: 11
Registriert: Donnerstag 6. Oktober 2005, 22:08
Wohnort: Norddeutschland

Guten Tag!

Meine heutigen Fragen lauten:

1. Gibt es in python Algorithmen (bzw. Funktionen, bzw. Codeschnipsel) zur Berechnung deutscher Feiertage und wo finde ich diese?
2. Gibt es Kalendermodule mit deutschen Feiertagen in Anzeige und Auswahl zur Weiterverarbeitung?

Danke für Eure/Ihre Auskünfte!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

THinhK hat geschrieben:1. Gibt es in python Algorithmen (bzw. Funktionen, bzw. Codeschnipsel) zur Berechnung deutscher Feiertage und wo finde ich diese?
Du bist nicht der erste der danach fragt.
THinhK hat geschrieben:2. Gibt es Kalendermodule mit deutschen Feiertagen in Anzeige und Auswahl zur Weiterverarbeitung?
Was meinst du damit? Fertige Listen mit Feiertagen? Ja.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

Guten Tag!

zu

Code: Alles auswählen

Was meinst du damit? Fertige Listen mit Feiertagen? Ja.
Möchte eine Kalender funtion benutzen um Kalenderangaben darzustellen, deren Tage (Feitertage, Wochenendtage, Termine) farblich gekennzeichnet sind und die wenn dargestellt anklickbar sind und dann den ausgewählten Tag zurückliefern.

Dazu würde ich gern Hilfe erhalten! Wie könnte so ein Codeschnippsel aussehen?
THinhK
User
Beiträge: 11
Registriert: Donnerstag 6. Oktober 2005, 22:08
Wohnort: Norddeutschland

Anonymous hat geschrieben:Guten Tag!

zu
Was meinst du damit? Fertige Listen mit Feiertagen? Ja.

Möchte eine Kalender funtion benutzen um Kalenderangaben darzustellen, deren Tage (Feitertage, Wochenendtage, Termine) farblich gekennzeichnet sind und die wenn dargestellt anklickbar sind und dann den ausgewählten Tag zurückliefern.

Dazu würde ich gern Hilfe erhalten! Wie könnte so ein Codeschnippsel aussehen?
Sorry war als Gast angemeldet!
THinhK
User
Beiträge: 11
Registriert: Donnerstag 6. Oktober 2005, 22:08
Wohnort: Norddeutschland

Hi,
folgendes kann ich zwar HTML von folgender Quelle erhalten (http://home.arcor.de/g-boll), möchte das ganze aber durch pythen generieren lassen und zwar wahlfrei für Monat, Jahr.

Code: Alles auswählen

<html>
<head>
<title>Kalender</title>
</head>
<body
style="color: rgb(51, 102, 0); background-color: rgb(255, 255, 204);">
<div align="center">
<table bgcolor="#ccccff" border="1" cellpadding="0" width="370">
<tbody>
<tr>
<th colspan="2" align="center"><font size="5"><b>Monatskalender
2005</b></font></th>
</tr>
<tr align="center">
<th colspan="2" bgcolor="#009900" width="370"><font
color="#ffffff">Oktober </font></th>
</tr>
<tr align="center">
<td bgcolor="#99ccff" width="30"><font color="#660000"><b>Sa. 1. </b></font></td>
<td bgcolor="#99ccff" width="340"><font color="#660000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ff99ff" width="30"><font color="#000066"><b>So. 2. </b></font></td>
<td bgcolor="#ff99ff" width="340"><font color="#000066"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ff66ff" width="30"><font color="#990000"><b>Mo. 3. </b></font></td>
<td bgcolor="#ff66ff" width="340"><font color="#990000">Tag d.
dt. Einheit<br>
<font color="#000000">40. KW</font></font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Di. 4. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Mi. 5. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Do. 6. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Fr. 7. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#99ccff" width="30"><font color="#660000"><b>Sa. 8. </b></font></td>
<td bgcolor="#99ccff" width="340"><font color="#660000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ff99ff" width="30"><font color="#000066"><b>So. 9. </b></font></td>
<td bgcolor="#ff99ff" width="340"><font color="#000066"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Mo. 10.
</b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000">41. KW<br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Di. 11.
</b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Mi. 12.
</b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Do. 13.
</b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Fr. 14.
</b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#99ccff" width="30"><font color="#660000"><b>Sa. 15.
</b></font></td>
<td bgcolor="#99ccff" width="340"><font color="#660000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ff99ff" width="30"><font color="#000066"><b>So. 16.
</b></font></td>
<td bgcolor="#ff99ff" width="340"><font color="#000066"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Mo.
17. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000">42. KW<br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Di.
18. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Mi.
19. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Do.
20. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Fr.
21. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#660000"><b>Sa.
22. </b></font></td>
<td bgcolor="#99ccff" width="340"><font color="#660000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ff99ff" width="30"><font color="#000066"><b>So. 23.
</b></font></td>
<td bgcolor="#ff99ff" width="340"><font color="#000066"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Mo.
24. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000">43. KW<br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Di.
25. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Mi.
26. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Do.
27. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#000000"><b>Fr.
28. </b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="peachpuff" width="30"><font color="#660000"><b>Sa.
29. </b></font></td>
<td bgcolor="#99ccff" width="340"><font color="#660000"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ff99ff" width="30"><font color="#000066"><b>So. 30.
</b></font></td>
<td bgcolor="#ff99ff" width="340"><font color="#000066"><br>
</font></td>
</tr>
<tr align="center">
<td bgcolor="#ffffff" width="30"><font color="#000000"><b>Mo. 31.
</b></font></td>
<td bgcolor="#ffffff" width="340"><font color="#000000">44. KW<br>
</font></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" width="370">
<tbody>
<tr>
<td colspan="2" align="center"><font size="1">© 1999: Gerhard
Boll, Waldshut, Germany</font></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
:P
Zuletzt geändert von THinhK am Montag 24. Oktober 2005, 09:56, insgesamt 1-mal geändert.
Gast

Guten Tag!
Dookie hat geschrieben:Hallo,
leider kommt es immer wieder vor, daß hier manche glauben, wir würden ihre Hausaufgaben lösen. Dafür ist dieses Forum echt nicht gedacht. Wenn einer bei einem Problem Hilfe braucht, geben wir gerne Hilfestellung, aber wenn hier Leute her kommen, die weder von Programmierung noch von Python eine Ahnung haben und glauben wir würden Ihnen fertige Lösungen liefern, so sind die hier falsch!

Gruß
Dookie
:idea: Ja, das ist vollkommen richtig!

:?: Nur, wo erfrage ich dann zu eimen Thema, wie diesem etwas, unter dem Gesichtspunkt: Warum soll ich doppelt entwickeln, was andere schon in der Tache haben? Hier fehl mir ein Index auf Beipiele bzw. gelöste Aufgaben bzw. Themen die im Forum behandelt wurden, für die eine Lösung erarbeitet wurde. Es scheint mir hier noch sehr kaotisch zuzugehen :!:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Anonymous hat geschrieben: :?: Nur, wo erfrage ich dann zu eimen Thema, wie diesem etwas, unter dem Gesichtspunkt: Warum soll ich doppelt entwickeln, was andere schon in der Tache haben? Hier fehl mir ein Index auf Beipiele bzw. gelöste Aufgaben bzw. Themen die im Forum behandelt wurden, für die eine Lösung erarbeitet wurde. Es scheint mir hier noch sehr kaotisch zuzugehen :!:
Einige Snippets sind unter PythonSnippets verlinkt, aber es hat keiner in letzter zeit ein Snippet gepostet, welches eintragenswert gewesen wäre.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

Hallo,

eine Berechnung der deutschen Feiertage kann man sich relativ einfach selber schreiben. Zunächst einmal gibt es ja die fixen Feiertag wie beispielsweise Neujahr, den 3. Oktober oder Weihnachten. Dazu kommen dann die beweglichen Feiertage.

Hierzu muss man wissen, dass sich die beweglichen alle von dem Ostersonntag ableiten. Diesen kann man wiederum über eine recht einfache Formel berechnen, wie sie beispielsweise hier beschrieben ist.

Bei dem oberen Link zu Wikipedia kann man dann nachlesen, wie viele Tage vor oder nach dem Ostersonntag die entsprechenden Feiertage liegen und aufgrund der vorhergehenden Berechnung des Ostersonntags auch die anderen Feiertage berechnen.

Ich hoffe mal, dass du damit schon ein wenig weiter kommst, ansonsten könnte ich dir auch noch einen Code-Ausschnitt bereitstellen... Aber ich finde immer, dass selber machen auch seine Vorteile hat :-)

MfG,
ein Gast
THinhK
User
Beiträge: 11
Registriert: Donnerstag 6. Oktober 2005, 22:08
Wohnort: Norddeutschland

Hi,...
Ich hoffe, nun zu meiner Ehrenrettung beitragen zu können ;-)
OK, die rette mich jetzt mal mit dem was ich gefunden habe...

(1) http://lists.debian.org/debian-user-ger ... 02368.html

calcEastern1.py

Code: Alles auswählen

#!/usr/bin/python

from sys import argv
from mx.DateTime import *

def DateFormat(string, date):
    print string + ": " + str(date.day) + '.' + str(ostern.month) + '.' + str(ostern.year)

if len(argv) <= 1 :
    year = now().year
else:
    year = int(argv[1])

d=(((255 - 11 * (year % 19)) - 21) % 30) + 21
if d > 48:
    d+=1

delta = d + 6 -  ((year + (year - ((year % 4))) / 4) + d + 1) % 7

ostern = DateTime(year,3,1) + delta

DateFormat("Aschermittwoch", ostern - 46)
DateFormat("Karfreitag", ostern - 2)
DateFormat("Ostern", ostern)
DateFormat("Ostermontag", ostern + 1)
DateFormat("Himmelfahrt", ostern + 39)
DateFormat("Pfingstsonntag", ostern + 49)
DateFormat("Pfingstmontag", ostern + 50)
# of calcEastern1()
... oder aber noch schöner ...

(2) http://lists.debian.org/debian-user-ger ... 02373.html

calcEastern2.py

Code: Alles auswählen

#!/usr/bin/python
from sys import argv
from mx.DateTime import *
from mx.DateTime.Feasts import *

def DateFormat(string, date):
    print string + ": " + str(date.day) + '.' + str(date.month) + '.' + str(date.year)

if len(argv) <= 1 :
    year = now().year
else:
    year = int(argv[1])

DateFormat("Rosenmontag", Rosenmontag(year))
DateFormat("Karfreitag", Karfreitag(year))
DateFormat("Ostern", Ostersonntag(year))
DateFormat("Ostermontag", Ostermontag(year))
DateFormat("Himmelfahrt", Himmelfahrt(year))
DateFormat("Pfingstsonntag", Pfingstsonntag(year))
DateFormat("Pfingstmontag", Pfingstmontag(year))
DateFormat("Fronleichnam", Fronleichnam(year))

# of calcEastern2()
(3) http://lf.starlogik.de/WandKalender.shtm
calcEastern3.py

Code: Alles auswählen

import datetime

def calcEastern(X):
    m  = 0
    # Berechnung von Ostern mittels Gaußscher Osterformel
    # siehe http://www.ptb.de/de/org/4/44/441/oste.htm
    # mindestens bis 2031 richtig
    K  = X / 100
    M  = 15 + ((3*K+3)/4) - ((8*K+13)/25)
    S  = 2 - ((3*K+3)/4)
    A  = X % 19
    D  = (19*A+M) % 30
    R  = (D/29) + ((D/28) - (D/ 29)) * (A/11)
    OG = 21 + D - R
    SZ = 7 - (X + (X/4)+S) % 7
    OE = 7 - ((OG-SZ)% 7)

    tmp = OG+OE  # das Osterdatum als Tages des M?z, also 32 entspricht 1. April
    if (tmp>31): # Monat erhöhen, tmp=tag erniedriegen
        m = tmp / 31
        tmp -= 31
    return datetime.date(X, 3+m, tmp)
# of calcEastern3()
Osterfestdaten für die Jahre 1980 bis 2031, berechnet nach den oben angegebenen Formeln. Trotz aller Sorgfalt bei der Programmierung kann für die Richtigkeit der berechneten Daten keine Gewähr übernommen werden.

Im betrachteten Zeitraum wurden ermittelt
--> als frühester Ostertermin: 23. März im Jahr 2008,
--> als spätester Ostertermin: 24. April im Jahr 2011.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Hmmm... was ist denn mx für ein Modul?
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

N317V hat geschrieben:Hmmm... was ist denn mx für ein Modul?
Das sind die eGenix mx Extensions, ich glaube das datetime Modul ist mx.DateTime.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten