Calendar-Julian

 view release on metacpan or  search on metacpan

lib/Calendar/Julian.pm  view on Meta::CPAN

package Calendar::Julian;

$Calendar::Julian::VERSION   = '0.17';
$Calendar::Julian::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Julian - Interface to Julian Calendar.

=head1 VERSION

Version 0.17

=cut

use 5.006;
use Data::Dumper;

use Date::Julian::Simple;
use Moo;
use namespace::autoclean;
use overload q{""} => 'as_string', fallback => 1;

has year  => (is => 'rw', predicate => 1);
has month => (is => 'rw', predicate => 1);
has date  => (is => 'ro', default   => sub { Date::Julian::Simple->new });
with 'Calendar::Plugin::Renderer';

sub BUILD {
    my ($self) = @_;

    $self->date->validate_year($self->year)   if $self->has_year;
    $self->date->validate_month($self->month) if $self->has_month;

    unless ($self->has_year && $self->has_month) {
        $self->year($self->date->year);
        $self->month($self->date->month);
    }
}

=head1 DESCRIPTION

The Julian  calendar  was  proclaimed  by Julius Cesar  in  46 B.C. and underwent
several modifications before reaching its final form in 8 C.E.The Julian calendar
differs  from  the Gregorian only in the determination of leap years, lacking the
correction  for  years divisible by 100 and 400 in the Gregorian calendar. In the
Julian calendar, any  positive year  is  a leap year if divisible by 4. (Negative
years are leap years if the absolute value divided by 4 yields a remainder of 1.)
Days are considered to begin at midnight.

In the Julian calendar the average year has a  length of 365.25 days. compared to
the actual solar tropical year of 365.24219878 days.The calendar thus accumulates
one  day  of error with respect to the solar year every 128 years. Being a purely
solar  calendar, no  attempt  is  made to  synchronise the start of months to the
phases of the Moon.

    +-----------------------------------------------------------------------------------+
    |                                  July [2017 BE]                                   |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+
    |    Sunday |    Monday |   Tuesday | Wednesday |  Thursday |    Friday |  Saturday |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+
    |                                                           |         1 |         2 |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+
    |         3 |         4 |         5 |         6 |         7 |         8 |         9 |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+
    |        10 |        11 |        12 |        13 |        14 |        15 |        16 |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+
    |        17 |        18 |        19 |        20 |        21 |        22 |        23 |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+
    |        24 |        25 |        26 |        27 |        28 |        29 |        30 |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+
    |        31 |                                                                       |
    +-----------+-----------+-----------+-----------+-----------+-----------+-----------+

The package L<App::calendr> provides command line tool  C<calendr> to display the
supported calendars on the terminal. Support for  C<Julian Calendar>  is provided
by L<App::calendr> v0.17 or above.

=head1 SYNOPSIS

    use strict; use warnings;
    use Calendar::Julian;

    # prints current julian month calendar.
    print Calendar::Julian->new, "\n";
    print Calendar::Julian->new->current, "\n";

    # prints julian month calendar in which the given julian day falls in.
    print Calendar::Julian->new->from_julian(2457102.5), "\n";

    # prints current month julian calendar in SVG format.
    print Calendar::Julian->new->as_svg;

    # prints current month julian calendar in text format.
    print Calendar::Julian->new->as_text;

=head1 JULIAN MONTHS

    +--------+------------------------------------------------------------------+
    | Number | Name                                                             |
    +--------+------------------------------------------------------------------+
    |   1    | January                                                          |
    |   2    | February                                                         |
    |   3    | March                                                            |
    |   4    | April                                                            |
    |   5    | May                                                              |
    |   6    | June                                                             |
    |   7    | July                                                             |
    |   8    | August                                                           |
    |   9    | September                                                        |
    |  10    | October                                                          |
    |  11    | November                                                         |
    |  12    | December                                                         |
    +--------+------------------------------------------------------------------+



( run in 4.278 seconds using v1.01-cache-2.11-cpan-9581c071862 )