func InternationalerTagDerPressefreiheit(x int) Feiertag {
	return Feiertag{time.Date(x, time.May, 3, 0, 0, 0, 0, getTimeZone()), "Internationaler Tag der Pressefreiheit"}
}
InternationalerTagDerPressefreiheit is World Press Freedom Day, a fixed date.
package feiertage
import (
	"fmt"
	"time"
)
type Feiertag struct {
	time.Time
	Text string
}
var defaultTimeFormat = "02.01.2006"
var defaultTimeZone = time.UTC
func getTimeFormat() string {
	return defaultTimeFormat
}
func SetDefaultTimeFormat(timeformat string) {
	defaultTimeFormat = timeformat
}
func SetDefaultTimeZone(timezone *time.Location) {
	defaultTimeZone = timezone
}
func getTimeZone() *time.Location {
	return defaultTimeZone
}
func (f Feiertag) String() string {
	return fmt.Sprintf("%s %s", f.Format(getTimeFormat()), f.Text)
}
type ByDate []Feiertag
func (a ByDate) Len() int {
	return len(a)
}
func (a ByDate) Swap(i, j int) {
	a[i], a[j] = a[j], a[i]
}
func (a ByDate) Less(i, j int) bool {
	return a[i].UnixNano() < a[j].UnixNano()
}
func Neujahr(x int) Feiertag {
	return Feiertag{time.Date(x, time.January, 1, 0, 0, 0, 0, getTimeZone()), "Neujahr"}
}
func Epiphanias(x int) Feiertag {
	return Feiertag{time.Date(x, time.January, 6, 0, 0, 0, 0, getTimeZone()), "Epiphanias"}
}
func HeiligeDreiKönige(x int) Feiertag {
	e := Epiphanias(x)
	e.Text = "Heilige drei Könige"
	return e
}
func Valentinstag(x int) Feiertag {
	return Feiertag{time.Date(x, time.February, 14, 0, 0, 0, 0, getTimeZone()), "Valentinstag"}
}
func InternationalerTagDesGedenkensAnDieOpferDesHolocaust(x int) Feiertag {
	return Feiertag{time.Date(x, time.January, 27, 0, 0, 0, 0, getTimeZone()), "Internationaler Tag des Gedenkens an die Opfer des Holocaust"}
}
func InternationalerFrauentag(x int) Feiertag {
	return Feiertag{time.Date(x, time.March, 8, 0, 0, 0, 0, getTimeZone()), "Internationaler Frauentag"}
}
func Josefitag(x int) Feiertag {
	return Feiertag{time.Date(x, time.March, 19, 0, 0, 0, 0, getTimeZone()), "Josefitag"}
}
func Weiberfastnacht(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -52), "Weiberfastnacht"}
}
func Karnevalssonntag(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -49), "Karnevalssonntag"}
}
func Rosenmontag(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -48), "Rosenmontag"}
}
func Fastnacht(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -47), "Fastnacht"}
}
func Aschermittwoch(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -46), "Aschermittwoch"}
}
func Palmsonntag(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -7), "Palmsonntag"}
}
func Gründonnerstag(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -3), "Gründonnerstag"}
}
func Karfreitag(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, -2), "Karfreitag"}
}
func Ostern(x int) Feiertag {
	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 + a/11) / 29
	og := 21 + d - r
	sz := 7 - (x+x/4+s)%7
	oe := 7 - (og-sz)%7
	os := og + oe
	day := os % 31
	month := os/31 + 3
	return Feiertag{time.Date(x, time.Month(month), day, 0, 0, 0, 0, getTimeZone()), "Ostern"}
}
func BeginnSommerzeit(x int) Feiertag {
	o := time.Date(x, time.March, 30, 0, 0, 0, 0, getTimeZone())
	d := (7 + int(o.Weekday())) % 7
	return Feiertag{o.AddDate(0, 0, -1*d), "Beginn Sommerzeit"}
}
func Ostermontag(x int) Feiertag {
	o := Ostern(x)
	return Feiertag{o.AddDate(0, 0, 1), "Ostermontag"}
}
func Walpurgisnacht(x int) Feiertag {
	return Feiertag{time.Date(x, time.April, 30, 0, 0, 0, 0, getTimeZone()), "Walpurgisnacht"}
}
func TagDerArbeit(x int) Feiertag {
	return Feiertag{time.Date(x, time.May, 1, 0, 0, 0, 0, getTimeZone()), "Tag der Arbeit"}
}
func Staatsfeiertag(x int) Feiertag {
	e := TagDerArbeit(x)
	e.Text = "Staatsfeiertag"
	return e
}