DateTime::Calendar::MaUser3Contributed Perl DocumeDateTime::Calendar::Mayan(3)NAMEDateTime::Calendar::Mayan - The Mayan Long Count, Haab, and Tzolkin
calendars
SYNOPSIS
use DateTime::Calendar::Mayan
my $dtcm = DateTime::Calendar::Mayan->new(
baktun => 12,
katun => 19,
tun => 10,
uinal => 2,
kin => 8,
# alternate epoch
epoch => DateTime->new(
year => -3113,
month => 8,
day => 13,
),
);
print $dtcm->date;
# prints 12.19.10.2.8
print $dtcm->haab;
# prints 3 Uayeb
print $dtcm->tzolkin;
# prints 3 Oc
DESCRIPTION
An implementation of the Mayan Long Count, Haab, and Tzolkin calendars
as defined in "Calendrical Calculations The Millennium Edition".
Supplemented by "Frequently Asked Questions about Calendars".
METHODS
· new( baktun => $scalar, ..., epoch => $object )
Accepts a hash representing a date on the Long Count calendar and a
"DateTime::Calendar" object specifying an alternate epoch. All
keys are optional.
The units are:
kin = 1 day
uinal = 20 days
tun = 360 days
katun = 7200 days
baktun = 144000 days
In the future pictuns, calabtuns, kinchiltuns, and alautuns may be
accepted.
· now
Alternate constructor. Uses DateTime->now to set the current date.
· today
Alternate constructor. Uses DateTime->today to set the current
date.
· clone
This object method returns a replica of the given object.
· from_object( object => $object )
Accepts a "DateTime::Calendar" object. Although this calendar
doesn't support time it will preserve the time value of objects
passed to it. This prevents a loss of precision when chaining
calendars.
Note: Language support is not implemented.
· utc_rd_values
Returns the current UTC Rata Die days, UTC Rata Die seconds, and
nanoseconds as a three element list.
· from_epoch( epoch => $scalar )
Creates a new object from a number of seconds relative to midnight
1970-01-01.
· epoch
Returns the number of seconds since midnight 1970-01-01.
· set_mayan_epoch( object => $object )
Accepts a "DateTime::Calendar" object. The epoch is set to this
value on a per object basis
The default epoch is:
Goodman-Martinez-Thompson
Aug. 11, -3113 / Sep. 6, 3114 B.C.E. / 584,283 JD
· mayan_epoch
Returns a "DateTime::Calendar::Mayan" object set to the current
Mayan epoch.
· date
· bktuk
· long_count( $scalar )
Returns the Long Count calendar date. Think DateTime::ymd. Like
ymd this method also accepts an optional field separator string.
· haab( $scalar )
Returns the Haab calendar date. Accepts an optional field
separator string.
· tzolkin( $scalar )
Returns the Tzolkin calendar date. Accepts an optional field
separator string.
· baktun
· katun
· tun
· uinal
· kin( $scalar )
Gets/Sets the long count value of the function name.
· set_baktun
· set_katun
· set_tun
· set_uinal
· set_kin( $scalar )
Aliases to the combined accessor/mutators.
· set( baktun => $scalar, ... )
Accepts a hash specifying new long count values. All units are
optional.
· add
· subtract( baktun => $scalar, ... )
Accepts a hash specifying values to add or subject from the long
count. All units are optional.
· add_duration
· subtract_duration( $object )
Accepts a "DateTime::Duration" object and either adds or subtracts
it from the current date. See the DateTime::Duration docs for
more details.
BACKGROUND
Please see:
Chapter 10 of Calendarical Calculations "The Millennium Edition".
and
Chapter 7 of Frequently Asked Questions about Calendars.
http://www.tondering.dk/claus/cal/node8.html
GOTCHAS
The Long Count calendar is cyclical and it is possible to have
different dates in other calendars that convert to be the same Long
Count date. Under this calendar the dates 0.0.0.0.0 and 13.0.0.0.0 are
equivalent.
The Long Count calendar will next roll over in late 2012 (Gregorian).
In anticipation of this Long Count dates input as 0-12.*.*.*.* will
convert to Gregorian dates in the Mayan year that started in -3113
(Gregorian). Long Count dates input as 13.*.*.*.* will convert to
Gregorian dates in the Mayan year that start in 2012 (Gregorian).
Example:
use DateTime;
use DateTime::Calendar::Mayan;
my $dtcm = DateTime::Calendar::Mayan->new( baktun => 0 );
print $dtcm->date, "\n";
print DateTime->from_object( object => $dtcm )->ymd, "\n";
$dtcm->set( baktun => 13);
print $dtcm->date, "\n";
print DateTime->from_object( object => $dtcm )->ymd, "\n";
Will print:
13.0.0.0.0
-3113-08-11
13.0.0.0.0
2012-12-21
As you can see the Long Count dates are identical but the Gregorian
equivalent dates are different.
Support for a count of Mayan "years" or "cycles" allowing accurate
conversion to/from Gregorian dates may be added to this module in the
future. This would be an extension to the historical Long Count
calendar.
CREDITS
Dave Rolsky (DROLSKY) for the DateTime project and carrying us this
far.
Eugene van der Pijll (PIJLL) for DateTime::Calendar::Julian which I
looked at more then once.
Calendrical Calculations "The Millennium Edition" By Edward M. Reingold
& Nachum Dershowitz. (ISBN 0-521-77752-6 paperback)
http://www.calendarists.com
Abigail (ABIGAIL) for Date::Maya from which I confirmed the algorithm
for Mayan years.
"Frequently Asked Questions about Calendars" by Claus Tondering.
http://www.tondering.dk/claus/calendar.html
SUPPORT
Support for this module is provided via the datetime@perl.org email
list. See http://lists.perl.org/ for more details.
AUTHOR
Joshua Hoblitt <jhoblitt@cpan.org>
COPYRIGHT
Copyright (c) 2003 Joshua Hoblitt. All rights reserved. This program
is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.
The full text of the license can be found in the LICENSE file included
with this module.
SEE ALSO
datetime@perl.org mailing list
http://datetime.perl.org/
perl v5.14.1 2011-07-21 DateTime::Calendar::Mayan(3)