2017-03-07 44 views
-1

我如何计算特定国家的正确假期日期,在这种情况下是瑞典? 我知道如何获得星期六和星期日,并将它们排除在处理之外。好的方法来计算复活节日期(PERL)

但其他节假日,如圣诞节,国庆节,基督skytraveller的一天,十三日,这是红色的日子,需要排除考勤解决方案。

我想知道的是,我如何做一个功能,给定一个特定的年份,月份和日期,如果它放假或不放假,它将返回真或假。

我看着日期::假期,但没有瑞典的数据源,它说我需要自己创建一个。但问题更多,我如何计算正确的日期?是否有特定的假期日期,例如复活节?

一些节日日期很容易在列表中创建,例如每年都有固定日期的圣诞节晚上和新年,但某些节假日每年都有所不同。

例如,这是超级复杂的:

复活节:第一个星期日春分后的第一个ecklesaustic满月后。

大多数其他动态假期是从复活节计算出来的。

+2

我投票结束这个问题作为题外话,因为它是关于如何确定瑞典假期的日期,而不是编程本身。 – Quentin

+1

@Quentin这个问题与编程有关,并且在编程环境中对于创建应用程序的编程环境非常有用,这些应用程序使用日期执行某些操作,并且需要了解假期。 –

+0

除非您需要计算历史上的任何一年,否则为未来10年制作假期的静态列表会更容易,并且要记下10年后更新列表的时间。如果您确实需要任意一年的数据,那么您只需查看每个假期的确定方式并实施算法即可。这是一个常见的任务,所以他们都应该很容易googleable。 – JJJ

回答

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; 
    }