Astro-Montenbruck
view release on metacpan or search on metacpan
2021-01-05 - List::MoreUtils dependency added to build prerequisites
2021-01-09 - Routines for calculating rise/set/transit times rewritten.
Algorithms from J.Meeus book substituted with the alternatives,
found in Montenbruck & Phleger's "Astronomy on the PC".
Thanks to Tom Browder for testing and collaborating!
2021-01-10 - Support of colorless output. Color schemes replaced with
themes, responsible for output.
2021-02-23 - Time zone parameter in rst_almanac.pl script, user locale auto-detection
fixes (failed on some systems), documntation fixes
2021-03-08 - Bug fix in Rise/Set routines. On rare occasions hourly iteration could
cross midnight and set time was missed. Documentation texts corrected,
thanks to Tom Browdy.
2021-05-08 - Sidereal time: result reduced to proper range
2022-01-31 - Fixed a serious bug in lunar phases calculations. The module was totally
rewritten. Now it uses a simpler but more reliable algorithm from
"Astronomy with Your PC" by Peter Duffett-Smith.
2022-02-05 - New function for calculating lunar phase in Lunar module. Example script
"moon_almanac.pl". List of lunar phases constants extended with
lib/Astro/Montenbruck/Utils/Helpers.pm view on Meta::CPAN
package Astro::Montenbruck::Utils::Helpers;
use 5.22.0;
use strict;
use warnings;
use Exporter qw/import/;
use POSIX qw/setlocale locale_h/;
use Readonly;
use DateTime;
use DateTime::TimeZone;
use DateTime::Format::Strptime qw/strptime/;
use Astro::Montenbruck::MathUtils qw/ddd dms zdms frac/;
use Astro::Montenbruck::Time qw/jd2unix/;
our $VERSION = 0.05;
our @EXPORT_OK = qw/parse_datetime parse_geocoords dmsz_str dms_or_dec_str
lib/Astro/Montenbruck/Utils/Helpers.pm view on Meta::CPAN
'%F'
);
Readonly::Array our @ZODIAC =>
qw/Aries Taurus Gemini Cancer Leo Virgin Libra Scorpio
Sagittarius Capricorn Aquarius Pisces/;
our $LOCALE;
BEGIN {
$LOCALE = setlocale(LC_ALL);
eval {
DateTime->now()->set_locale($LOCALE);
};
$LOCALE = 'C'
}
our @DEFAULT_PLACE = qw/51N28 000W00/;
sub parse_datetime {
my $s = shift;
my $dt = eval {
lib/Astro/Montenbruck/Utils/Helpers.pm view on Meta::CPAN
} else {
my $res;
for my $p (@DATETIME_PATTERNS) {
$res = eval { strptime($p, $s) };
last unless $@
}
$res
}
};
die "Could not parse date & time '$s': $@" unless $dt;
$dt->set_locale($LOCALE);
if ($dt->time_zone->name eq 'floating') {
# eval { $dt->set_time_zone('local') };
$dt->set_time_zone('UTC') if $@;
}
$dt
}
sub parse_geocoords {
for (@_) {
lib/Astro/Montenbruck/Utils/Helpers.pm view on Meta::CPAN
"$lats, $lons"
}
sub current_timezone {
DateTime::TimeZone->new( name => 'local' )->name()
}
sub local_now {
DateTime->now()->set_locale($LOCALE)->set_time_zone(current_timezone())
}
1;
__END__
_END__
=pod
( run in 1.012 second using v1.01-cache-2.11-cpan-5735350b133 )