⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 leapsecond.pm

📁 1. 记录每个帖子的访问人情况
💻 PM
字号:
package DateTime::LeapSecond;use 5.005;use strict;use vars qw( $VERSION );use vars qw( @RD @LEAP_SECONDS %RD_LENGTH );$VERSION = '0.05';  # last standalone distro was 0.03use DateTime;# Generates a Perl binary decision treesub _make_utx {    my ($beg, $end, $tab, $op) = @_;    my $step = int(($end - $beg) / 2);    my $tmp;    if ($step <= 0) {        $tmp = "${tab}return $LEAP_SECONDS[$beg + 1];\n";          return $tmp;    }    $tmp  = "${tab}if (\$val < " . $RD[$beg + $step] . ") {\n";    $tmp .= _make_utx ($beg, $beg + $step, $tab . "    ", $op);    $tmp .= "${tab}}\n";    $tmp .= "${tab}else {\n";    $tmp .= _make_utx ($beg + $step, $end, $tab . "    ", $op);    $tmp .= "${tab}}\n";    return $tmp;}# Process BEGIN data and write binary tree decision tablesub _init {    my $value = -1;    while (@_) {        my ( $year, $mon, $mday, $leap_seconds ) =            ( shift, shift, shift, shift );        # print "$year,$mon,$mday\n";        my $utc_epoch = DateTime->_ymd2rd( $year, ( $mon =~ /Jan/i ? 1 : 7 ), $mday );        $value++;        push @LEAP_SECONDS, $value;        push @RD, $utc_epoch;        $RD_LENGTH{ $utc_epoch - 1 } = $leap_seconds;        # warn "$year,$mon,$mday = $utc_epoch +$value";    }    push @LEAP_SECONDS, ++$value;    my $tmp;    # write binary tree decision table    $tmp  = "sub leap_seconds {\n";    $tmp .= "    my \$val = shift;\n";    $tmp .= _make_utx (-1, 1 + $#RD, "    ", "+");    $tmp .= "}\n";    # NOTE: uncomment the line below to see the code:    #warn $tmp;    eval $tmp;}sub extra_seconds {    exists $RD_LENGTH{ $_[0] } ? $RD_LENGTH{ $_[0] } : 0}sub day_length {    exists $RD_LENGTH{ $_[0] } ? 86400 + $RD_LENGTH{ $_[0] } : 86400}sub initialize {    # this table: ftp://62.161.69.5/pub/tai/publication/leaptab.txt    # known accurate until (at least): 2003-12-31    #    # There are no leap seconds before 1972, because that's the    # year this system was implemented.    #    # year month day number-of-leapseconds    #    _init ( qw(1972  Jan. 1  +1 1972  Jul. 1  +11973  Jan. 1  +11974  Jan. 1  +11975  Jan. 1  +11976  Jan. 1  +11977  Jan. 1  +11978  Jan. 1  +11979  Jan. 1  +11980  Jan. 1  +11981  Jul. 1  +11982  Jul. 1  +11983  Jul. 1  +11985  Jul. 1  +11988  Jan. 1  +11990  Jan. 1  +11991  Jan. 1  +11992  Jul. 1  +11993  Jul. 1  +11994  Jul. 1  +11996  Jan. 1  +11997  Jul. 1  +11999  Jan. 1  +1    ) );}__PACKAGE__->initialize;1;__END__=head1 NAMEDateTime::LeapSecond - leap seconds table and utilities=head1 SYNOPSIS  use DateTime;  use DateTime::LeapSecond;  print "Leap seconds between years 1990 and 2000 are ";  print Date::Leapsecond::leap_seconds( $utc_rd_2000 ) -        Date::Leapsecond::leap_seconds( $utc_rd_1990 );=head1 DESCRIPTIONThis module is used to calculate leap seconds for a given Rata Dieday.  It is used when DateTime.pm cannot compile the XS version ofthis code.This library is known to be accurate for dates until december 2003.There are no leap seconds before 1972, because that's the year thissystem was implemented.=over 4=item * leap_seconds( $rd )Returns the number of accumulated leap seconds for a given day,in the range 0 .. 23.=item * extra_seconds( $rd )Returns the number of leap seconds for a given day,in the range -2 .. 2.=item * day_length( $rd )Returns the number of seconds for a given day,in the range 86398 .. 86402.=back=head1 AUTHORFl醰io Soibelmann Glock, E<lt>fglock@pucrs.brE<gt>=head1 COPYRIGHTCopyright (c) 2003 Fl醰io Soibelmann Glock.  All rights reserved.This program is free software; you can redistribute it and/or modifyit under the same terms as Perl itself.The full text of the license can be found in the LICENSE file includedwith this module.=head1 SEE ALSOE<lt>http://hpiers.obspm.fr/eop-pc/earthor/utc/leapsecond.htmlE<gt>http://datetime.perl.org=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -