Astro-Montenbruck

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


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 )