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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 1.t'
#########################
use strict;
use warnings;
use Test::More tests => 43;
BEGIN { use_ok('DateTime::Calendar::Julian') };
#########################
my $d = DateTime::Calendar::Julian->new( year => 1582, month => 10, day => 5, time_zone => 'floating');
ok($d, 'creation of date');
is(($d->utc_rd_values)[0], 2299160-1721424, 'rata die');
use DateTime;
foreach my $date (
# Julian date , Gregorian , diff
[ '1582/10/05', '1582/10/15', 10 ], # Jul => Greg reform date
[ '1752/09/03', '1752/09/14', 11 ], # English reform date
[ '1900/02/29', '1900/03/13', 12 ], # Julian leap year
[ '1918/02/01', '1918/02/14', 13 ], # Russian reform date
[ '0000/01/03', '0000/01/01', -2 ], # 1 BC
['-4712/01/01','-4713/11/24',-38 ], # Julian Day 0
) {
my ($y, $m, $day) = split '/', $date->[0];
# time_zone to work around a bug(?) in early DateTime versions
my $d = DateTime::Calendar::Julian->new(year => $y,
month => $m,
day => $day,
hour => 0, # for
minute => 0, # datetime()
second => 0, # test
time_zone => 'floating' );
my $str = sprintf( '%04d-%02d-%02d', $y, $m, $day );
is( $d->datetime(), "${str}J00:00:00", "datetime() of $date->[0]" );
is( "$d", "${str}T00:00:00", "stringification of $date->[0]" );
my $dt = DateTime->from_object( object => $d );
is($dt->ymd('/'), $date->[1], "converting $date->[0] to Gregorian");
$d = DateTime::Calendar::Julian->from_object( object => $dt );
is($d->ymd('/'), $date->[0], "converting $date->[1] to Julian");
is($d->gregorian_deviation, $date->[2], "gregorian dev. on $date->[0]");
}
$d = DateTime::Calendar::Julian->new(year => 2003);
ok(!($d->is_leap_year), 'non-leap year');
$d = DateTime::Calendar::Julian->new(year => 2004);
ok($d->is_leap_year, 'ordinary leap year');
$d = DateTime::Calendar::Julian->new(year => 2000);
ok($d->is_leap_year, 'leap year (multiple of 400)');
$d = DateTime::Calendar::Julian->new(year => 1900);
ok($d->is_leap_year, 'leap year (multiple of 100)');
$d = DateTime::Calendar::Julian->new( year => 1900, month => 2, day => 29, time_zone => 'floating');
is($d->ymd, '1900-02-29', 'leap day 1900-02-29 exists');
$d = DateTime::Calendar::Julian->last_day_of_month( year => 1900, month => 2, time_zone => 'floating');
is($d->ymd, '1900-02-29', 'leap day 1900 is last of the month');
SKIP: {
skip 'epoch not UNIX', 2 unless gmtime(0) eq 'Thu Jan 1 00:00:00 1970';
$d = DateTime::Calendar::Julian->from_epoch( epoch => 0 );
is( $d->epoch, 0, 'epoch 0' );
is( $d->ymd, '1969-12-19', 'epoch is correct' );
}
$d = DateTime::Calendar::Julian->new( year => 1900, month => 10, day => 1, time_zone => 'floating');
$d->add( years => 1 );
is($d->ymd, '1901-10-01', 'adding a year');
is( $d->calendar_name, 'Julian', 'Calendar name' );
|