 NAME

DateTime::Astro - Functions For Astromical Calendars

DESCRIPTION

DateTime::Astro implements functions used in astronomical calendars, such as calculation of lunar longitudea and solar longitude.

This module is best used in environments where a C compiler and the MPFR arbitrary precision math library is installed. It can fallback to using Math::BigInt, but that would pretty much render it useless because of its speed and loss of accuracy that may creep up while doing Perl to C struct conversions.

DISCLAIMER

This module works, but there are several caveats you should be aware of:

MPFR Is Required / PurePerl Version Not Functional

There /is/ a HALF BAKED Pure Perl implmentation bundled with this distribution, but at this point please consider it UNUSABLE. This sort of calculation requires the speed and efficiency of a C library anyway.

As such, you HAVE to have MPFR installed correctly in your system. Please consult your local package manager, or http://mpfr.org

Patches to make the pure perl version work better is always welcome.

17 solar terms are still off by ~ 5 minutes

I've tried very hard to correctly calculate the solar term dates with this module, but I still get 17 instances in about 130 years worth of solar terms, where the dates are off by an average of about 5 minutes -- and these usually fall at right about midnight, causing day-based comparisons to be off by 1.

I'm sure there's something that's causing a round off somwhere. If you're up to it, please see xt/101_solar_terms.t and see if you can fix it for me!

FUNCTIONS

BACKEND()

Returns 'XS' or 'PP', noting the current backend.

dt_from_moment(\$moment)

Given a moment (days since rd + fractional seconds), returns a DateTime object in UTC

dynamical_moment(\$moment)

Computes the moment value from given moemnt, taking into account the ephemeris correction.

dynamical_moment_from_dt(\$dt)

Computes the moment value from a DateTime object, taking into account the ephemeris correction.

ephemeris_correction(\$moment)

Computes the ephemeris correction on a given moment

gregorian_components_from_rd(\$rd_days)

Computes year, month, date from RD value

gregorian_year_from_rd(\$rd_days)

Computes year from RD value

julian_centuries(\$dt)

Computes the julian centuries for given DateTime object

julian_centuries_from_moment(\$moment)

Computes the julian centuries for given moment

lunar_phase(\$dt)

Computes the lunar phase for given DateTime object

lunar_phase_from_moment(\$moment)

Computes the lunar phase for given moment

polynomial(\$x, ...)

Computes the polynomical expression using \$x as the variable. The left most argument is the constant, and each successive argument is the coefficient for the next power of \$x

ymd_seconds_from_moment(\$moment)

Computes the gregorian components (year, month, day) from the RD date, and the number of seconds from the fractional part.

lunar_longitude(\$dt)

Returns the Moon's longitude on the given date \$dt

lunar_longitude_from_moment(\$moment)

Returns the Moon's longitude on the given moment \$moment

moment(\$dt)

Returns the date \$dt expressed in moment

nth_new_moon(\$n)

Returns the \$n-th new moon, in \$moment.

Currently the new moons dates are accurate to about within +/- 60 seconds of the actual new moon for modern dates.

For older dates, the accuraccy degrades a bit to about +/- 5 minutes.

solar_longitude(\$dt)

Returns the Sun's longitude on the given date \$dt

solar_longitude_from_moment(\$moment)

Returns the Sun's longitude on the given moment \$moment

CONSTANTS

MEAN_SYNODIC_MONTH

Mean time (in moment) between new moons

MEAN_TROPICAL_YEAR

Mean time (in moment) between a full year (time for the Earth to go around the sun)