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

📄 piece.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
📖 第 1 页 / 共 2 页
字号:
# $Id: Piece.pm 72 2007-11-19 01:26:10Z matt $package Time::Piece;use strict;require Exporter;require DynaLoader;use Time::Seconds;use Carp;use Time::Local;use UNIVERSAL qw(isa);our @ISA = qw(Exporter DynaLoader);our @EXPORT = qw(    localtime    gmtime);our %EXPORT_TAGS = (    ':override' => 'internal',    );our $VERSION = '1.12';bootstrap Time::Piece $VERSION;my $DATE_SEP = '-';my $TIME_SEP = ':';my @MON_LIST = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);my @FULLMON_LIST = qw(January February March April May June July                      August September October November December);my @DAY_LIST = qw(Sun Mon Tue Wed Thu Fri Sat);my @FULLDAY_LIST = qw(Sunday Monday Tuesday Wednesday Thursday Friday Saturday);use constant 'c_sec' => 0;use constant 'c_min' => 1;use constant 'c_hour' => 2;use constant 'c_mday' => 3;use constant 'c_mon' => 4;use constant 'c_year' => 5;use constant 'c_wday' => 6;use constant 'c_yday' => 7;use constant 'c_isdst' => 8;use constant 'c_epoch' => 9;use constant 'c_islocal' => 10;sub localtime {    unshift @_, __PACKAGE__ unless eval { $_[0]->isa('Time::Piece') };    my $class = shift;    my $time  = shift;    $time = time if (!defined $time);    $class->_mktime($time, 1);}sub gmtime {    unshift @_, __PACKAGE__ unless eval { $_[0]->isa('Time::Piece') };    my $class = shift;    my $time  = shift;    $time = time if (!defined $time);    $class->_mktime($time, 0);}sub new {    my $class = shift;    my ($time) = @_;        my $self;        if (defined($time)) {        $self = $class->localtime($time);    }    elsif (ref($class) && $class->isa(__PACKAGE__)) {        $self = $class->_mktime($class->epoch, $class->[c_islocal]);    }    else {        $self = $class->localtime();    }        return bless $self, $class;}sub parse {    my $proto = shift;    my $class = ref($proto) || $proto;    my @components;    if (@_ > 1) {        @components = @_;    }    else {        @components = shift =~ /(\d+)$DATE_SEP(\d+)$DATE_SEP(\d+)(?:(?:T|\s+)(\d+)$TIME_SEP(\d+)(?:$TIME_SEP(\d+)))/;        @components = reverse(@components[0..5]);    }    return $class->new(_strftime("%s", @components));}sub _mktime {    my ($class, $time, $islocal) = @_;    $class = eval { (ref $class) && (ref $class)->isa('Time::Piece') }           ? ref $class           : $class;    if (ref($time)) {        $time->[c_epoch] = undef;        return wantarray ? @$time : bless [@$time, $islocal], $class;    }    _tzset();    my @time = $islocal ?            CORE::localtime($time)                :            CORE::gmtime($time);    wantarray ? @time : bless [@time, $time, $islocal], $class;}my %_special_exports = (  localtime => sub { my $c = $_[0]; sub { $c->localtime(@_) } },  gmtime    => sub { my $c = $_[0]; sub { $c->gmtime(@_)    } },);sub export {  my ($class, $to, @methods) = @_;  for my $method (@methods) {    if (exists $_special_exports{$method}) {      no strict 'refs';      no warnings 'redefine';      *{$to . "::$method"} = $_special_exports{$method}->($class);    } else {      $class->SUPER::export($to, $method);    }  }}sub import {    # replace CORE::GLOBAL localtime and gmtime if required    my $class = shift;    my %params;    map($params{$_}++,@_,@EXPORT);    if (delete $params{':override'}) {        $class->export('CORE::GLOBAL', keys %params);    }    else {        $class->export((caller)[0], keys %params);    }}## Methods ##sub sec {    my $time = shift;    $time->[c_sec];}*second = \&sec;sub min {    my $time = shift;    $time->[c_min];}*minute = \&min;sub hour {    my $time = shift;    $time->[c_hour];}sub mday {    my $time = shift;    $time->[c_mday];}*day_of_month = \&mday;sub mon {    my $time = shift;    $time->[c_mon] + 1;}sub _mon {    my $time = shift;    $time->[c_mon];}sub month {    my $time = shift;    if (@_) {        return $_[$time->[c_mon]];    }    elsif (@MON_LIST) {        return $MON_LIST[$time->[c_mon]];    }    else {        return $time->strftime('%b');    }}*monname = \&month;sub fullmonth {    my $time = shift;    if (@_) {        return $_[$time->[c_mon]];    }    elsif (@FULLMON_LIST) {        return $FULLMON_LIST[$time->[c_mon]];    }    else {        return $time->strftime('%B');    }}sub year {    my $time = shift;    $time->[c_year] + 1900;}sub _year {    my $time = shift;    $time->[c_year];}sub yy {    my $time = shift;    my $res = $time->[c_year] % 100;    return $res > 9 ? $res : "0$res";}sub wday {    my $time = shift;    $time->[c_wday] + 1;}sub _wday {    my $time = shift;    $time->[c_wday];}*day_of_week = \&_wday;sub wdayname {    my $time = shift;    if (@_) {        return $_[$time->[c_wday]];    }    elsif (@DAY_LIST) {        return $DAY_LIST[$time->[c_wday]];    }    else {        return $time->strftime('%a');    }}*day = \&wdayname;sub fullday {    my $time = shift;    if (@_) {        return $_[$time->[c_wday]];    }    elsif (@FULLDAY_LIST) {        return $FULLDAY_LIST[$time->[c_wday]];    }    else {        return $time->strftime('%A');    }}sub yday {    my $time = shift;    $time->[c_yday];}*day_of_year = \&yday;sub isdst {    my $time = shift;    $time->[c_isdst];}*daylight_savings = \&isdst;# Thanks to Tony Olekshy <olekshy@cs.ualberta.ca> for this algorithmsub tzoffset {    my $time = shift;        return Time::Seconds->new(0) unless $time->[c_islocal];    my $epoch = $time->epoch;    my $j = sub {        my ($s,$n,$h,$d,$m,$y) = @_; $m += 1; $y += 1900;        $time->_jd($y, $m, $d, $h, $n, $s);    };    # Compute floating offset in hours.    #    my $delta = 24 * (&$j(CORE::localtime $epoch) - &$j(CORE::gmtime $epoch));    # Return value in seconds rounded to nearest minute.    return Time::Seconds->new( int($delta * 60 + ($delta >= 0 ? 0.5 : -0.5)) * 60 );}sub epoch {    my $time = shift;    if (defined($time->[c_epoch])) {        return $time->[c_epoch];    }    else {        my $epoch = $time->[c_islocal] ?          timelocal(@{$time}[c_sec .. c_mon], $time->[c_year]+1900)          :          timegm(@{$time}[c_sec .. c_mon], $time->[c_year]+1900);        $time->[c_epoch] = $epoch;        return $epoch;    }}sub hms {    my $time = shift;    my $sep = @_ ? shift(@_) : $TIME_SEP;    sprintf("%02d$sep%02d$sep%02d", $time->[c_hour], $time->[c_min], $time->[c_sec]);}*time = \&hms;sub ymd {    my $time = shift;    my $sep = @_ ? shift(@_) : $DATE_SEP;    sprintf("%d$sep%02d$sep%02d", $time->year, $time->mon, $time->[c_mday]);}*date = \&ymd;sub mdy {    my $time = shift;    my $sep = @_ ? shift(@_) : $DATE_SEP;    sprintf("%02d$sep%02d$sep%d", $time->mon, $time->[c_mday], $time->year);}sub dmy {    my $time = shift;    my $sep = @_ ? shift(@_) : $DATE_SEP;    sprintf("%02d$sep%02d$sep%d", $time->[c_mday], $time->mon, $time->year);}sub datetime {    my $time = shift;    my %seps = (date => $DATE_SEP, T => 'T', time => $TIME_SEP, @_);    return join($seps{T}, $time->date($seps{date}), $time->time($seps{time}));}# Julian Day is always calculated for UT regardless# of local timesub julian_day {    my $time = shift;    # Correct for localtime    $time = $time->gmtime( $time->epoch ) if $time->[c_islocal];    # Calculate the Julian day itself    my $jd = $time->_jd( $time->year, $time->mon, $time->mday,                        $time->hour, $time->min, $time->sec);    return $jd;}# MJD is defined as JD - 2400000.5 dayssub mjd {    return shift->julian_day - 2_400_000.5;}# Internal calculation of Julian date. Needed here so that# both tzoffset and mjd/jd methods can share the code# Algorithm from Hatcher 1984 (QJRAS 25, 53-55), and#  Hughes et al, 1989, MNRAS, 238, 15# See: http://adsabs.harvard.edu/cgi-bin/nph-bib_query?bibcode=1989MNRAS.238.1529H&db_key=AST# for more detailssub _jd {    my $self = shift;    my ($y, $m, $d, $h, $n, $s) = @_;    # Adjust input parameters according to the month    $y = ( $m > 2 ? $y : $y - 1);    $m = ( $m > 2 ? $m - 3 : $m + 9);    # Calculate the Julian Date (assuming Julian calendar)    my $J = int( 365.25 *( $y + 4712) )      + int( (30.6 * $m) + 0.5)        + 59          + $d            - 0.5;    # Calculate the Gregorian Correction (since we have Gregorian dates)    my $G = 38 - int( 0.75 * int(49+($y/100)));    # Calculate the actual Julian Date

⌨️ 快捷键说明

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