golang德国公共假期计算插件库feiertage的使用

Golang德国公共假期计算插件库feiertage的使用

简介

Feiertage是一个Go/Golang库,用于计算德国和奥地利的公共假期。它包含复活节日期的计算,更重要的是提供了获取德国或奥地利各州(Bundesland)公共假期的方法。

这个库可能只对在奥地利或德国有特殊需求(如排班表或容量计算)的人有用。

使用方法

有两种类型的函数:

  • <feiertag>(year)
  • <region>(year optional:IncludingSundays:true)

单个假期函数

<feiertag>返回一个扩展的time对象(类型为feiertag)。它包含请求年份的假期日期和假期名称。可用的<feiertag>包括:

Neujahr, Epiphanias, HeiligeDreiKönige, Valentinstag, 
InternationalerTagDesGedenkensAnDieOpferDesHolocaust, Josefitag,
Weiberfastnacht, Karnevalssonntag, Rosenmontag, Fastnacht,
Aschermittwoch, InternationalerFrauentag, Palmsonntag,
Gründonnerstag, Karfreitag, Ostern, BeginnSommerzeit,
Ostermontag, Walpurgisnacht, TagDerArbeit, TagDerBefreiung,
Staatsfeiertag, InternationalerTagDerPressefreiheit, Florianitag,
Muttertag, Handtuchtag, ChristiHimmelfahrt, Vatertag,
Pfingsten, Pfingstmontag, Dreifaltigkeitssonntag, Fronleichnam,
TagDesMeeres, MariäHimmelfahrt, SystemAdministratorAppreciationDay,
Rupertitag, InternationalerKindertag, Weltflüchtlingstag,
TagDerDeutschenEinheit, TagDerVolksabstimmung, Nationalfeiertag,
Erntedankfest, Reformationstag, Halloween, BeginnWinterzeit,
Allerheiligen, Allerseelen, Martinstag, Karnevalsbeginn,
Leopolditag, Weltkindertag, BußUndBettag, Thanksgiving,
Blackfriday, Volkstrauertag, Nikolaus, MariäUnbefleckteEmpfängnis,
MariäEmpfängnis, Totensonntag, ErsterAdvent, ZweiterAdvent,
DritterAdvent, VierterAdvent, Heiligabend, Weihnachten,
Christtag, Stefanitag, ZweiterWeihnachtsfeiertag, Silvester

地区函数

<region>返回一个region类型的对象。它提供了指定州有效的公共假期列表以及州的名称和简称。可用的<region>包括:

BadenWürttemberg, Bayern, Berlin, Brandenburg, Bremen, Hamburg,
Hessen, MecklenburgVorpommern, Niedersachsen, NordrheinWestfalen,
RheinlandPfalz, Saarland, Sachsen, SachsenAnhalt, SchleswigHolstein,
Thüringen, Deutschland, Burgenland, Kärnten, Niederösterreich,
Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien,
Österreich, All

可选参数includingSundays将地区函数的行为切换为在输出中包含"落在星期日的法定假期"。这在勃兰登堡尤为重要,特别是复活节和五旬节星期日。如果你在计算轮班成本,你需要知道这些"被星期日隐藏的假期"。

示例代码

单个假期示例

package main

import (
	"fmt"
	"github.com/wlbr/feiertage"
)

func main() {
	// 计算2016年复活节日期
	fmt.Println(feiertage.Ostern(2016))
	// 输出: 27.03.2016 Ostern

	// 计算2016年忏悔祈祷日
	fmt.Println(feiertage.BußUndBettag(2016))
	// 输出: 16.11.2016 Buß- und Bettag
}

地区假期示例

package main

import (
	"fmt"
	"github.com/wlbr/feiertage"
)

func main() {
	// 获取勃兰登堡2016年所有公共假期(包括星期日)
	brandenburg2016 := feiertage.Brandenburg(2016)
	fmt.Println(brandenburg2016)
	/* 输出:
	Brandenburg (BB)
		01.01.2016 Neujahr
		25.03.2016 Karfreitag
		27.03.2016 Ostern
		28.03.2016 Ostermontag
		01.05.2016 Tag der Arbeit
		05.05.2016 Christi Himmelfahrt
		15.05.2016 Pfingsten
		16.05.2016 Pfingstmontag
		03.10.2016 Tag der deutschen Einheit
		31.10.2016 Reformationstag
		25.12.2016 Weihnachten
		26.12.2016 Zweiter Weihnachtsfeiertag
	*/

	// 获取勃兰登堡2016年公共假期(不包括星期日)
	brandenburg2016NoSundays := feiertage.Brandenburg(2016, false)
	fmt.Println(brandenburg2016NoSundays)
	/* 输出:
	Brandenburg (BB)
		01.01.2016 Neujahr
		25.03.2016 Karfreitag
		28.03.2016 Ostermontag
		01.05.2016 Tag der Arbeit
		05.05.2016 Christi Himmelfahrt
		16.05.2016 Pfingstmontag
		03.10.2016 Tag der deutschen Einheit
		31.10.2016 Reformationstag
		25.12.2016 Weihnachten
		26.12.2016 Zweiter Weihnachtsfeiertag
	*/
}

命令行工具

该库还包含一个小型命令行工具。可以使用make buildcmdgo build cmd/feiertage/feiertage.go编译,这将创建一个可执行文件feiertage

命令行工具使用说明

feiertage: [options] year

选项:

  • -asTaskjugglerCode (默认 false) - 以Taskjuggler规划工具的有效源代码形式(leave x y)打印结果
  • -inklusiveSonntage (默认 false) - 是否包含星期日的公共假期?
  • -region <regionstring> (默认 “All”) - 返回指定区域的公共假期

<regionstring>可以是(不区分大小写):

BadenWürttemberg, Bayern, Berlin, Brandenburg, Bremen, Hamburg,
Hessen, MecklenburgVorpommern, Niedersachsen, NordrheinWestfalen,
RheinlandPfalz, Saarland, Sachsen, SachsenAnhalt, SchleswigHolstein,
Thüringen, Deutschland, Burgenland, Kärnten, Niederösterreich,
Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien,
Österreich, All

更多关于golang德国公共假期计算插件库feiertage的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang德国公共假期计算插件库feiertage的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang 德国公共假期计算插件库 feiertage 使用指南

feiertage 是一个用于计算德国公共假期的 Golang 库,它可以根据年份和地区计算德国的法定节假日。下面我将详细介绍如何使用这个库。

安装

首先,使用 go get 安装该库:

go get github.com/htimann/feiertage

基本使用

1. 获取所有德国公共假期

package main

import (
	"fmt"
	"github.com/htimann/feiertage"
	"time"
)

func main() {
	// 获取2023年所有德国公共假期
	holidays := feiertage.All(2023)
	
	for _, holiday := range holidays {
		fmt.Printf("%s: %s (%s)\n", 
			holiday.Name, 
			holiday.Date.Format("2006-01-02"), 
			holiday.Date.Weekday())
	}
}

2. 按联邦州获取假期

德国不同联邦州有不同的假期,可以使用 ByState 方法:

func main() {
	// 获取2023年巴伐利亚州(Bayern)的公共假期
	holidays := feiertage.ByState(2023, feiertage.BY)
	
	for _, holiday := range holidays {
		fmt.Printf("%s: %s\n", holiday.Name, holiday.Date.Format("02.01.2006"))
	}
}

3. 检查特定日期是否为假期

func main() {
	date := time.Date(2023, 12, 25, 0, 0, 0, 0, time.UTC)
	
	// 检查全德国范围
	if feiertage.IsHoliday(date, "") {
		fmt.Println("今天是全德国的假期!")
	}
	
	// 检查特定州(这里使用柏林)
	if feiertage.IsHoliday(date, feiertage.BE) {
		fmt.Println("今天是柏林的假期!")
	}
}

4. 获取所有支持的联邦州

func main() {
	states := feiertage.GetStates()
	
	fmt.Println("支持的联邦州:")
	for _, state := range states {
		fmt.Printf("%s: %s\n", state.Code, state.Name)
	}
}

联邦州代码

feiertage 库中定义了德国各联邦州的代码常量:

  • BW: 巴登-符腾堡州 (Baden-Württemberg)
  • BY: 巴伐利亚州 (Bayern)
  • BE: 柏林 (Berlin)
  • BB: 勃兰登堡州 (Brandenburg)
  • HB: 不来梅 (Bremen)
  • HH: 汉堡 (Hamburg)
  • HE: 黑森州 (Hessen)
  • MV: 梅克伦堡-前波美拉尼亚州 (Mecklenburg-Vorpommern)
  • NI: 下萨克森州 (Niedersachsen)
  • NW: 北莱茵-威斯特法伦州 (Nordrhein-Westfalen)
  • RP: 莱茵兰-普法尔茨州 (Rheinland-Pfalz)
  • SL: 萨尔州 (Saarland)
  • SN: 萨克森州 (Sachsen)
  • ST: 萨克森-安哈尔特州 (Sachsen-Anhalt)
  • SH: 石勒苏益格-荷尔斯泰因州 (Schleswig-Holstein)
  • TH: 图林根州 (Thüringen)

高级用法

1. 自定义输出格式

func main() {
	holidays := feiertage.ByState(2023, feiertage.BY)
	
	fmt.Println("2023年巴伐利亚州假期:")
	for _, holiday := range holidays {
		fmt.Printf("%-25s %-10s %s\n",
			holiday.Name,
			holiday.Date.Format("02.01.2006"),
			holiday.Date.Weekday())
	}
}

2. 计算未来假期

func main() {
	currentYear := time.Now().Year()
	
	for year := currentYear; year <= currentYear+2; year++ {
		fmt.Printf("\n%d年假期:\n", year)
		holidays := feiertage.ByState(year, feiertage.BW)
		
		for _, holiday := range holidays {
			fmt.Printf("- %s (%s)\n", holiday.Name, holiday.Date.Format("02.01"))
		}
	}
}

3. 与其他日期处理库结合

func main() {
	holidays := feiertage.All(2023)
	
	// 找出所有周末的假期
	for _, holiday := range holidays {
		if holiday.Date.Weekday() == time.Saturday || holiday.Date.Weekday() == time.Sunday {
			fmt.Printf("%s 落在周末: %s\n", holiday.Name, holiday.Date.Format("2006-01-02"))
		}
	}
}

注意事项

  1. 该库计算的是法定公共假期,不包括学校假期或其他非官方假期
  2. 复活节等移动节日的计算是准确的
  3. 不同联邦州可能有不同的假期安排
  4. 库中的日期都是 time.Time 类型,时区为 UTC

通过 feiertage 库,你可以轻松地在你的 Golang 应用中集成德国公共假期计算功能,无论是用于日历应用、工作时间计算还是其他需要假期信息的场景。

回到顶部