如何计算特定国家/地区的正确假日日期,在这种情况下是瑞典? 我知道如何获得星期六和星期日,并将它们排除在处理之外。
但是其他假期,如圣诞节,国庆节,基督天空旅行日,十三天,这些都是红日,需要在出勤解决方案中排除。
我想知道的是,如果某个特定年份,月份和日期,我将如何执行某项功能,如果是假期,将返回真或假。
我查看了Date :: Holidays但是没有瑞典的数据源,它说我需要自己创建一个。但问题是更多,我如何计算正确的日期?是否有特定的算法来获取假日日期,例如复活节?
有些假日日期很容易从列表中创建,例如每年有固定日期的圣诞节晚会和新年,但每年的假期都不同。
例如,这非常复杂:
复活节:在春分之后的第一次ecklesaustic满月之后的第一个星期天。
大多数其他动态假期都是在复活节之外计算的。
答案 0 :(得分:2)
这是我用它创建的函数。它希望将一年作为参数,并将返回当年瑞典所有红色日(非工作日)的哈希值。
请注意,它不会返回任何星期六或星期日的假期,因为星期六和星期日是非商业性的。
Requires Date::Calc and Date::Easter
sub GetHoliDayList() {
$yeartocheck = $_[0];
$holiday{'1-1'} = '1';
$holiday{'1-6'} = '1';
$holiday{'5-1'} = '1';
$holiday{'6-6'} = '1';
$holiday{'6-24'} = '1';
$holiday{'12-24'} = '1';
$holiday{'12-25'} = '1';
$holiday{'12-26'} = '1';
$holiday{'12-31'} = '1';
($eastermonth, $easterday) = gregorian_easter( $yeartocheck );
$hea = int($eastermonth)."-".int(int($easterday) - 2);
$heb = int($eastermonth)."-".int(int($easterday) + 1);
$holiday{$hea} = '1';
$holiday{$heb} = '1';
($year,$christskytravellermonth,$christskytravellerday) = Add_Delta_YMD($yeartocheck,$eastermonth,$easterday, 0,0,39);
$chstv = int($christskytravellermonth)."-".int($christskytravellerday);
$holiday{$chstv} = '1';
if (Day_of_Week($yeartocheck,6,19) == 5) {
$holiday{'6-19'} = '1';
}
if (Day_of_Week($yeartocheck,6,20) == 5) {
$holiday{'6-20'} = '1';
}
if (Day_of_Week($yeartocheck,6,21) == 5) {
$holiday{'6-21'} = '1';
}
if (Day_of_Week($yeartocheck,6,22) == 5) {
$holiday{'6-22'} = '1';
}
if (Day_of_Week($yeartocheck,6,23) == 5) {
$holiday{'6-23'} = '1';
}
if (Day_of_Week($yeartocheck,6,24) == 5) {
$holiday{'6-24'} = '1';
}
if (Day_of_Week($yeartocheck,6,25) == 5) {
$holiday{'6-25'} = '1';
}
return %holiday;
}