German Feiertagsberechnung für Kalender

Wolli013

Well-Known Member
Licensed User
Longtime User
Hi, ich möchte gerne in meinen Kalender Feiertage für Deutschland anzeigen lassen, gibt es dafür irgendeine Datenbank oder kann man das auch einfach berechnen?

Nutze dafür den Coolen - AnotherDatePicker -
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Bin schon auf den richtigen weg, wer kann mir nur sagen wie ich das richtig berechne, wa muss ich anstatt Adddays einsetzen?

FeiertagFronleichnam = Osterdatum.AddDays(60) 'Fronleichnam=Osterdatum + 60Tage
 

DonManfred

Expert
Licensed User
Longtime User

Wolli013

Well-Known Member
Licensed User
Longtime User
Habe es hin bekommen, vielen Dank nochmal. Hier die Lösung fals es jemand brauchen sollte.
Warscheinlich geht es noch einfacher, aber ich bin froh das ich es geschaft habe.

B4X:
Private Sub FeiertageBerechnen
          Dim a As Int, b As Int, c As Int
        Dim d As Int, e As Int
        Dim Tag , Monat As Int           
        a = year Mod 19
        b = year Mod 4
        c = year Mod 7
        d = (19 * a + 24) Mod 30
        e = (2 * b + 4 * c + 6 * d + 5) Mod 7

        Tag = 22 + d + e
        Monat = 3

        If Tag > 31 Then
            Tag = d + e - 9
            Monat = 4
        Else If Tag = 26 And Monat = 4 Then
            Tag = 19
        Else If Tag = 25 And Monat = 4 And d = 28 And e = 6 And a > 10 Then
            Tag = 18
        End If

        Osterdatum = Tag &"."& Monat &"."& year
            Dim t As Long = DateTime.DateParse(Osterdatum)
        DtFeiertage(0) = "01.01." & year 'Neujahr
                DtFeiertage(1) = "06.01." & year 'Hl. Dreikönige (nur in BW, BY und ST)
        DtFeiertage(2) = "01.05." & year 'Maifeiertag
                DtFeiertage(3) = "15.08." & year 'Mariä Himmelfahrt (nur SL und in Teilen BY)
        DtFeiertage(4) = "03.10." & year 'Tag der Deutschen Einheit
                DtFeiertage(5) = "31.10." & year 'Reformationstag (nur in BB, MV, SN, ST und TH)
        DtFeiertage(6) = "01.11." & year 'Allerheiligen (nur in BW, BY, NW, RP und SL)
        DtFeiertage(7) = "25.12." & year '1. Weihnachtsfeiertag
        DtFeiertage(8) = "26.12." & year '2. Weihnachtsfeiertag       
                DtFeiertage(9) = DateTime.Date(DateTime.Add(t,0,0,-2)) 'Karfreitag           
        DtFeiertage(10) = DateTime.Date(DateTime.Add(t,0,0,0)) 'Ostersonntag               
                DtFeiertage(11) = DateTime.Date(DateTime.Add(t,0,0,1)) 'Ostermontag
        DtFeiertage(12) = DateTime.Date(DateTime.Add(t,0,0,39)) 'Christi Himmerlfahrt
                DtFeiertage(13) = DateTime.Date(DateTime.Add(t,0,0,49)) 'Pfingstsonntag
        DtFeiertage(14) = DateTime.Date(DateTime.Add(t,0,0,50)) 'Pfingstmontag
        DtFeiertage(15) = DateTime.Date(DateTime.Add(t,0,0,60)) 'Fronleichnam (nur in BW, BY, HE, NW, RP, SL und in Teilen SN und TH)

For i = 9 To 15
Log ("Feiertag am: " & DtFeiertage(i))
Next
End Sub
 

DonManfred

Expert
Licensed User
Longtime User
Oder mit ´nem Javawrapper :)

B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim cal As CalHelp
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")
    Log(cal.getEaster(2015))
    DateTime.DateFormat = "dd.MM.yyyy"
    Dim feiertage As Map = cal.getHoliday(2015)
    For i = 0 To feiertage.Size -1
        Log(feiertage.GetKeyAt(i)&"="&DateTime.Date(feiertage.GetValueAt(i)))
    Next
End Sub

5.3.
OsterSonntag=05.03.2015
OsterMontag=06.03.2015
Karfreitag=03.03.2015
RosenMontag=16.01.2015
Christi Himmelfahrt=13.04.2015
PfingstSonntag=13.04.2015
Frohnleichnam=04.05.2015
Tag der deutschen Einheit=01.10.2015
Heilig Abend=24.12.2015
1. Weihnachtstag=25.12.2015
2. Weihnachtstag=26.12.2015
Silvester=31.12.2015
Neujahr=01.01.2015
 

Attachments

  • CalHelpEx.zip
    6.6 KB · Views: 196
  • CalHelpV1.0.zip
    2.3 KB · Views: 194
  • CalHelpSRC.zip
    2 KB · Views: 204

Wolli013

Well-Known Member
Licensed User
Longtime User
Da fehlen aber noch der Pfingstmontag und einmal ist der 13.04.doppelt oder muss ich noch was ändern für NRW

LogCat connected to:

5.3.
OsterSonntag=05.03.2015
OsterMontag=06.03.2015
Karfreitag=03.03.2015
RosenMontag=16.01.2015
Christi Himmelfahrt=13.04.2015
PfingstSonntag=13.04.2015
Frohnleichnam=04.05.2015
Tag der deutschen Einheit=01.10.2015
Heilig Abend=24.12.2015
1. Weihnachtstag=25.12.2015
2. Weihnachtstag=26.12.2015
Silvester=31.12.2015
Neujahr=01.01.2015
** Activity (main) Resume **
 
Last edited:

DonManfred

Expert
Licensed User
Longtime User
Ohh, simmt... Ich habe nur einen Code, den ich fand umgesetzt... Ist mir gar nicht aufgefallen, daß PfingstSonntag und Christi Himmelfahrt da am gleichn Tag sind.
Vielleicht habe ich im wrapper auch was falsch gemacht. Ich gucke heute abend mal...
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Hier noch mal der komplete Code für die Bundeslandauswahl. Es ist in der Class, Another DatePicker eingefügt, welche Super ist!
Die Bundesländer werden über einer Setting Sub ausgegeben wo der User sein Bundesland wählen kann und wird dann in der Datei Setting geschrieben.
Funtioniert Super, vielleicht können welche, den Code ja noch kleiner oder Sinnvoller gestalten.

B4X:
Private Sub FeiertageBerechnen
          Dim a As Int, b As Int, c As Int
        Dim d As Int, e As Int
        Dim Tag , Monat As Int           
'year wird aus DatePicker übernommen
        a = year Mod 19
        b = year Mod 4
        c = year Mod 7
        d = (19 * a + 24) Mod 30
        e = (2 * b + 4 * c + 6 * d + 5) Mod 7

        Tag = 22 + d + e
        Monat = 3

        If Tag > 31 Then
            Tag = d + e - 9
            Monat = 4
        Else If Tag = 26 And Monat = 4 Then
            Tag = 19
        Else If Tag = 25 And Monat = 4 And d = 28 And e = 6 And a > 10 Then
            Tag = 18
        End If
'Osterdatum = String
        Osterdatum = Tag &"."& Monat &"."& year
            Dim t As Long = DateTime.DateParse(Osterdatum)
               
'Hole die Bundesland Auswahl vom Nutzer aus der Datenbank
    SQL1.Initialize(File.DirDefaultExternal, "setting.db", False)'Datenbank Verzeichnissangabe
    Dim Cursor1 As Cursor   
    Cursor1 = SQL1.ExecQuery("SELECT setting4 FROM setting")'Datenbank einlesen
   For i = 0 To Cursor1.RowCount - 1
    Cursor1.Position = i   
'Bundesland = String            
        Bundesland = Cursor1.GetString("setting4")'Feiertage übergeben
   Next
    
'DtFeiertage = Arry    
              For kein = 0 To 15
                 DtFeiertage(kein) = "" 'Alle Einträge bereinigen
                Next       
                If Bundesland = "Baden-Württemberg" Then 'Baden-Württemberg
                DtFeiertage(1) = "06.01." & year 'Hl. Dreikönige (nur in BW, BY und ST)
        DtFeiertage(6) = "01.11." & year 'Allerheiligen (nur in BW, BY, NW, RP und SL)
        DtFeiertage(15) = DateTime.Date(DateTime.Add(t,0,0,60)) 'Fronleichnam (nur in BW, BY, HE, NW, RP, SL und in Teilen SN und TH)
                End If
               
                If Bundesland = "Bayern" Then 'Bayern
                DtFeiertage(1) = "06.01." & year 'Hl. Dreikönige (nur in BW, BY und ST)
                DtFeiertage(3) = "15.08." & year 'Mariä Himmelfahrt (nur SL und in Teilen BY)
        DtFeiertage(6) = "01.11." & year 'Allerheiligen (nur in BW, BY, NW, RP und SL)
        DtFeiertage(15) = DateTime.Date(DateTime.Add(t,0,0,60)) 'Fronleichnam (nur in BW, BY, HE, NW, RP, SL und in Teilen SN und TH)
                End If
                            
                If Bundesland = "Hessen" Then 'Hessen
        DtFeiertage(15) = DateTime.Date(DateTime.Add(t,0,0,60)) 'Fronleichnam (nur in BW, BY, HE, NW, RP, SL und in Teilen SN und TH)           
                End If       
                               
                If Bundesland = "Brandenburg" Or Bundesland = "Mecklenburg-Vorpommern" Then 'Brandenburg
                DtFeiertage(5) = "31.10." & year 'Reformationstag (nur in BB, MV, SN, ST und TH)
                End If   
        
                If Bundesland = "Sachsen" Or Bundesland = "Thüringen" Then 'Sachsen
                DtFeiertage(5) = "31.10." & year 'Reformationstag (nur in BB, MV, SN, ST und TH)
        DtFeiertage(15) = DateTime.Date(DateTime.Add(t,0,0,60)) 'Fronleichnam (nur in BW, BY, HE, NW, RP, SL und in Teilen SN und TH)
                End If   
    
                If Bundesland = "Nordrhein-Westfalen" Or Bundesland = "Rheinland-Pfalz" Then 'Nordrhein-Westfalen
        DtFeiertage(6) = "01.11." & year 'Allerheiligen (nur in BW, BY, NW, RP und SL)
        DtFeiertage(15) = DateTime.Date(DateTime.Add(t,0,0,60)) 'Fronleichnam (nur in BW, BY, HE, NW, RP, SL und in Teilen SN und TH)
                End If
   
                If Bundesland = "Saarland" Then 'Saarland
                DtFeiertage(3) = "15.08." & year 'Mariä Himmelfahrt (nur SL und in Teilen BY)
        DtFeiertage(6) = "01.11." & year 'Allerheiligen (nur in BW, BY, NW, RP und SL)           
        DtFeiertage(15) = DateTime.Date(DateTime.Add(t,0,0,60)) 'Fronleichnam (nur in BW, BY, HE, NW, RP, SL und in Teilen SN und TH)
                End If   
                If Bundesland = "Sachsen-Anhalt" Then 'Sachsen-Anhalt
                DtFeiertage(1) = "06.01." & year 'Hl. Dreikönige (nur in BW, BY und ST)
                DtFeiertage(5) = "31.10." & year 'Reformationstag (nur in BB, MV, SN, ST und TH)
                End If   
       
'Für alle Feste Feiertage überall gleich
                 DtFeiertage(0) = "01.01." & year 'Neujahr
                DtFeiertage(2) = "01.05." & year 'Maifeiertag
                DtFeiertage(4) = "03.10." & year 'Tag der Deutschen Einheit
                DtFeiertage(7) = "25.12." & year '1. Weihnachtsfeiertag
        DtFeiertage(8) = "26.12." & year '2. Weihnachtsfeiertag       
                 DtFeiertage(9) = DateTime.Date(DateTime.Add(t,0,0,-2)) 'Karfreitag           
        DtFeiertage(10) = DateTime.Date(DateTime.Add(t,0,0,0)) 'Ostersonntag               
                DtFeiertage(11) = DateTime.Date(DateTime.Add(t,0,0,1)) 'Ostermontag
        DtFeiertage(12) = DateTime.Date(DateTime.Add(t,0,0,39)) 'Christi Himmerlfahrt
                DtFeiertage(13) = DateTime.Date(DateTime.Add(t,0,0,49)) 'Pfingstsonntag
        DtFeiertage(14) = DateTime.Date(DateTime.Add(t,0,0,50)) 'Pfingstmontag
                If Bundesland = "Keine Feiertage" Then 'Ohne Feiertage
                 For kein = 0 To 15
                 DtFeiertage(kein) = "" 'Leer Eintrag
                 Next            
        End If
End Sub
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Wer kann mir sagem wie man statt einer Zahl ein Bild im Kalender angezeigt bekommt.
Ich wollte wenn man Geburtstag har eine Kerze oder was auch immer anzeigen lassen.
Was muss ich ändern.

B4X:
' Geburtstagsanzeige
    Dim Bild_Geburtstag As Bitmap
    Bild_Geburtstag.Initialize(File.DirAssets, "geburtstag.png")
   
    If day &"." & month = Geburtstag Then
    cvs.DrawText(day, (((dayOfWeekOffset + day - 1) Mod 7) + 0.5) * boxW, _
    (row + 0.5)* boxH + vCorrection, Typeface.DEFAULT_BOLD, Label1.TextSize, Colors.Black, "CENTER")
    End If
' Geburtstagsanzeige
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Wer es gebrauchen kann, so geht es.

B4X:
Private Sub DrawDays

' Geburtstagsanzeige 
If day & "." & month = Geburtstag Then
DrawGeburtstag(cvs, selectedColor, (dayOfWeekOffset + day - 1) Mod 7, (dayOfWeekOffset + day - 1) / 7)
End If
' Geburtstagsanzeige

End Sub

Private Sub DrawGeburtstag(c As Canvas, clr As Int, x As Int, y As Int)

Dim Bitmap1 As Bitmap
Bitmap1.Initialize(File.DirAssets, "geburtstag.png")
Dim r As Rect
r.Initialize(x * boxW, y * boxH, (x + 1) * boxW, (y + 1) * boxH)
cvs.DrawBitmap(Bitmap1, Null, r)

End Sub
 
Last edited:
Top