1
0
Fork 0
mirror of https://github.com/Luzifer/go-holidays.git synced 2024-10-18 14:14:20 +00:00
go-holidays/holidays/holidays_de.go
Knut Ahlers 9e3382f215
Restructure german holidays, fix missing days
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2022-08-18 13:48:11 +02:00

95 lines
4.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package holidays
import "time"
func init() {
registerHolidayDataSource("de", holidaysDE{})
registerHolidayDataSource("de-bb", holidaysDE{state: "bb"})
registerHolidayDataSource("de-be", holidaysDE{state: "be"})
registerHolidayDataSource("de-bw", holidaysDE{state: "bw"})
registerHolidayDataSource("de-by", holidaysDE{state: "by"})
registerHolidayDataSource("de-hb", holidaysDE{state: "hb"})
registerHolidayDataSource("de-he", holidaysDE{state: "he"})
registerHolidayDataSource("de-hh", holidaysDE{state: "hh"})
registerHolidayDataSource("de-mv", holidaysDE{state: "mv"})
registerHolidayDataSource("de-ni", holidaysDE{state: "ni"})
registerHolidayDataSource("de-nw", holidaysDE{state: "nw"})
registerHolidayDataSource("de-rp", holidaysDE{state: "rp"})
registerHolidayDataSource("de-sh", holidaysDE{state: "sh"})
registerHolidayDataSource("de-sl", holidaysDE{state: "sl"})
registerHolidayDataSource("de-sn", holidaysDE{state: "sn"})
registerHolidayDataSource("de-st", holidaysDE{state: "st"})
registerHolidayDataSource("de-th", holidaysDE{state: "th"})
}
type (
holidaysDE struct{ state string }
)
func (holidaysDE) GetIncludes() []string { return nil }
func (h holidaysDE) GetHolidays(year int) []Holiday {
var (
neujahr = newHoliday("New Year's Day", map[string]string{"de": "Neujahrstag"}, dateFromNumbers(year, 1, 1))
hlDreiKoenige = newHoliday("Epiphany", map[string]string{"de": "Heilige Drei Könige"}, dateFromNumbers(year, 1, 6))
womansDay = newHoliday("International Womens Day", map[string]string{"de": "Internationaler Frauentag"}, dateFromNumbers(year, 3, 8))
tagDerArbeit = newHoliday("Labor Day", map[string]string{"de": "Tag der Arbeit"}, dateFromNumbers(year, 5, 1))
marHimmelfahrt = newHoliday("Assumption of Mary", map[string]string{"de": "Mariä Himmelfahrt"}, dateFromNumbers(year, 8, 15))
kinderTag = newHoliday("World Children's Day", map[string]string{"de": "Weltkindertag"}, dateFromNumbers(year, 9, 20))
tagDerEinheit = newHoliday("German Unity Day", map[string]string{"de": "Tag der Deutschen Einheit"}, dateFromNumbers(year, 10, 3))
reformationsTag = newHoliday("Reformation Day", map[string]string{"de": "Reformationstag"}, dateFromNumbers(year, 10, 31))
allerheiligen = newHoliday("All Saints", map[string]string{"de": "Allerheiligen"}, dateFromNumbers(year, 11, 1))
weihnacht1 = newHoliday("Christmas Day", map[string]string{"de": "Weihnachtstag"}, dateFromNumbers(year, 12, 25))
weihnacht2 = newHoliday("Boxing Day", map[string]string{"de": "Zweiter Weihnachtsfeiertag"}, dateFromNumbers(year, 12, 26))
karfreitag = newHoliday("Good Friday", map[string]string{"de": "Karfreitag"}, GregorianEasterSunday(year).Add(-2*day))
osterSonntag = newHoliday("Easter Sunday", map[string]string{"de": "Ostersonntag"}, GregorianEasterSunday(year))
osterMontag = newHoliday("Easter Monday", map[string]string{"de": "Ostermontag"}, GregorianEasterSunday(year).Add(1*day))
chrHimmelfahrt = newHoliday("Ascension Day", map[string]string{"de": "Christi Himmelfahrt"}, GregorianEasterSunday(year).Add(39*day))
pfingstMontag = newHoliday("Whit Monday", map[string]string{"de": "Pfingstmontag"}, GregorianEasterSunday(year).Add(50*day))
fronleichnam = newHoliday("Corpus Christi", map[string]string{"de": "Fronleichnam"}, GregorianEasterSunday(year).Add(60*day))
national = []Holiday{
neujahr, tagDerArbeit, tagDerEinheit, weihnacht1, weihnacht2,
karfreitag, osterSonntag, osterMontag, chrHimmelfahrt, pfingstMontag,
}
states = map[string][]Holiday{
"": national,
"bb": append(national, reformationsTag),
"be": append(national, womansDay),
"bw": append(national, hlDreiKoenige, fronleichnam, allerheiligen),
"by": append(national, hlDreiKoenige, fronleichnam, marHimmelfahrt, allerheiligen),
"hb": append(national, reformationsTag),
"he": append(national, fronleichnam),
"hh": append(national, reformationsTag),
"mv": append(national, reformationsTag),
"ni": append(national, reformationsTag),
"nw": append(national, fronleichnam, allerheiligen),
"rp": append(national, fronleichnam, allerheiligen),
"sh": append(national, reformationsTag),
"sl": append(national, fronleichnam, marHimmelfahrt, allerheiligen),
"sn": append(national, reformationsTag, h.getDRP(year)),
"st": append(national, hlDreiKoenige, reformationsTag),
"th": append(national, kinderTag, reformationsTag),
}
)
return states[h.state]
}
func (holidaysDE) getDRP(year int) Holiday {
var (
day time.Time
dayN = 16
)
for {
day = dateFromNumbers(year, 11, dayN)
if day.Weekday() == time.Wednesday {
break
}
dayN++
}
return newHoliday("Day of Repentance and Prayer", map[string]string{"de": "Buß- und Bettag"}, day)
}