Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

jonasbn (1153)

  reversethis-{gro.napc} {ta} {nbsanoj}
AOL IM: BJonasN (Add Buddy, Send Message)

Perl Programmer located in Copenhagen, Denmark. Active member of Copenhagen Perl Mongers.

Author of:

  • Business::DK::CPR
  • Business::DK::CVR
  • Business::DK::PO
  • Business::OnlinePayment::CashCow
  • Date::Holidays
  • Date::Holidays::Abstract
  • Date::Holidays::Super
  • Date::Pregnancy
  • Games::Bingo
  • Games::Bingo::Bot
  • Games::Bingo::Print
  • Module::Info::File
  • Module::Template::Setup
  • Test::Timer

and maintainer of:

  • Tie::Tools
  • XML::Conf
  • Workflow

Journal of jonasbn (1153)

Sunday December 18, 2005
10:56 AM

Date::Holidays::* - coming to your country?

[ #28046 ]

Locale::Country lists 240 countries. Out of these 240, 8 countries are present in the Date::Holidays::* namespace.

In order to make this namespace more usable, we need a better coverage - we need to go global :)

Currently the following countries are represented:

Norway, Denmark, Australia, New Zealand, Portugal, Germany, Great Britain/United Kingdom and France and USA is actually in preparation.

But plenty of countries are not represented.

I have just uploaded Date-Holidays_0.06 to CPAN, this module, contains documentation on how to comply with the other modules in the namespace.

From Date::Holidays_0.06 (slightly modified):

        There is no control of the Date::Holidays::* namespace at all, so I am
        by no means an authority, but this is recommendations on order to make
        the modules in the Date::Holidays more uniform and thereby more usable.

        If you want to participate in the effort to make the Date::Holidays::*
        namespace even more usable, feel free to do so, your feedback and
        suggestions will be more than welcome.

        If you want to add your country to the Date::Holidays::* namespace,
        please feel free to do so. If a module for you country is already
        present, I am sure the author would not mind patches, suggestion or even

        If however you country does not seem to be represented in the namespace,
        you are more than welcome to become the author of the module in

        Please note that the country code is expected to be a two letter code
        based on ISO3166 (or Locale::Country).

        As an experiment I have added two modules to the namespace,
        Date::Holidays::Abstract and Date::Holidays::Super, abstract is attempt
        to make sure that the module implements the expected methods.

        So by using abstract your module will not work until it follows the the
        abstract layed out for a Date::Holidays::* module. Unfortunately the
        module will only check for the presence of the methods not their

        Date::Holidays::Super is for the lazy programmer, it implements the
        necessary methods as stubs and there for do not have to implement
        anything, but your module will not return anything of value. So the
        methods need to be overwritten in order to comply with the expected
        output of a Date::Holidays::* method.

        The methods which are currently interesting in a Date::Holidays::*
        module are:

                Takes 3 arguments: year, month, day and returns the name of the
                holiday as a scalar in the national language of the module context
                in question. Returns undef if the requested day is not a holiday.

                                Modified example taken from: Date::Holidays::DK

                                use Date::Holidays::DK;
                        my ($year, $month, $day) = (localtime)[ 5, 4, 3 ];

                                $year += 1900;
                        $month += 1;
                        print "Woohoo" if is_holiday( $year, $month, $day );

                                #The actual method might not be implemented at this time in the
                                #example module.

                Same as above.

                This method however should be a wrapper of the above method (or the
                other way around).

                Takes 1 argument: year and returns a hashref containing all of the
                holidays in specied for the country, in the national language of the
                module context in question.

                The keys are the dates, month + day in two digits each contatenated.

                                Modified example taken from: Date::Holidays::PT

                                my $h = holidays($year);
                                printf "Jan. 1st is named '%s'\n", $h->{'0101'};

                                #The actual method might not be implemented at this time in the
                                #example module.

                This method however should be a wrapper of the above method (or the
                other way around).

        Only is_holiday and holidays are implemented in Date::Holidays::Super
        and are required by Date::Holidays::Abstract.

        Some countries are divided into regions or similar and might require
        additional parameters in order to give more exact holiday data.

        This is handled by adding additional parameters to is_holiday and

        These parameters are left to the module authors descretion and the
        actual Date::Holidays::* module should be consulted.

                        Example Date::Holidays::AU

                use Date::Holidays::AU qw( is_holiday );

                        my ($year, $month, $day) = (localtime)[ 5, 4, 3 ];
                $year += 1900;
                $month += 1;

                        my ($state) = 'VIC';
                print "Excellent\n" if is_holiday( $year, $month, $day, $state );

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.