Astro-App-Satpass2
view release on metacpan or search on metacpan
lib/Astro/App/Satpass2/ParseTime/ISO8601.pm view on Meta::CPAN
package Astro::App::Satpass2::ParseTime::ISO8601;
use strict;
use warnings;
use Astro::App::Satpass2::Utils qw{
back_end __back_end_class_name_of_record __parse_class_and_args
HAVE_DATETIME
@CARP_NOT
};
use Astro::Coord::ECI::Utils 0.112 qw{
looks_like_number SECSPERDAY greg_time_gm greg_time_local };
use parent qw{ Astro::App::Satpass2::ParseTime };
our $VERSION = '0.057';
my $package = __PACKAGE__;
sub attribute_names {
my ( $self ) = @_;
return ( $self->SUPER::attribute_names(), qw{ back_end } );
}
sub class_name_of_record {
my ( $self ) = @_;
return $self->__back_end_class_name_of_record(
$self->SUPER::class_name_of_record() );
}
my $zone_re = qr{ (?i: ( Z | UT | GMT ) |
( [+-] ) ( [0-9]{1,2} ) :? ( [0-9]{1,2} )? ) }smx;
sub delegate {
return __PACKAGE__;
}
{
my %special_day_offset = (
yesterday => -SECSPERDAY(),
today => 0,
tomorrow => SECSPERDAY(),
);
my $era_ad = sub { return $_[0] };
my $era_bc = sub { return 1 - $_[0] };
my %era_cvt = (
AD => $era_ad,
BC => $era_bc,
BCE => $era_bc,
CE => $era_ad,
);
# Note that we have to reverse sort the keys because otherwise 'BC'
# gets matched before we have a chance to try 'BCE'.
my $era_re = qr< (?: @{[
join ' | ', reverse sort keys %era_cvt
]} ) >smxi;
my $make_epoch = HAVE_DATETIME ? sub {
my ( $self, $zone, $offset, @date ) = @_;
$zone ||= 'local';
if ( defined( my $special = $special_day_offset{$date[0]} ) ) {
my $dt = DateTime->today(
time_zone => $zone,
);
splice @date, 0, 3, $dt->year(), $dt->month(), $dt->day();
$offset += $special;
}
my %dt_arg;
@dt_arg{ qw<
( run in 0.896 second using v1.01-cache-2.11-cpan-39bf76dae61 )