PLEAC-Perl 教程 - Date and Time (Perl进阶者极力推荐)

PLEAC-Perl 教程 - Date and Time (Perl进阶者极力推荐),第1张

概述[root@localhost perl]# perl t.pl $VAR1 = '2011093011:33:05'; $VAR1 = '5'; $VAR2 = '09'; $VAR3 = '30'; $VAR4 = '11'; $VAR5 = '33'; $VAR6 = '05'; $VAR7 = '2011'; [root@localhost perl]# cat t.pl #!/usr/b

[root@localhost perl]# perl t.pl
$VAR1 = '2011093011:33:05';
$VAR1 = '5';
$VAR2 = '09';
$VAR3 = '30';
$VAR4 = '11';
$VAR5 = '33';
$VAR6 = '05';
$VAR7 = '2011';
[root@localhost perl]# cat t.pl
#!/usr/bin/perl
use strict;
use Data::Dumper;

use Date::Manip qw(ParseDate UnixDate);
my $string = "Fri Sep 30 11:33:05 CST 2011";
my $date = ParseDate($string);
print Dumper $date;
my ($w,$mon,$day);
if (!$date) {
} else {
 my   @values = UnixDate($date,"%w","%m","%d","%H","%M","%s","%Y");
        print Dumper @values;
}

http://blog.csdn.net/bsdplus/article/details/2327111

 3. Dates and Times Introduction #----------------------------- $sec #----------------------------- $min #----------------------------- $hours #----------------------------- $mday #----------------------------- $month #----------------------------- $year #----------------------------- $wday #----------------------------- $yday #----------------------------- $isdst #----------------------------- #Fri Apr 11 09:27:08 1997 #----------------------------- # using arrays print "Today is day ",(localtime)[7]," of the current year./n"; # Today is day 117 of the current year. # using Time::tm objects use Time::localtime; $tm = localtime; print "Today is day ",$tm->yday," of the current year./n"; # Today is day 117 of the current year. #----------------------------- Finding Today's Date #----------------------------- ($DAY,$MONTH,$YEAR) = (localtime)[3,4,5]; #----------------------------- use Time::localtime; $tm = localtime; ($DAY,$YEAR) = ($tm->mday,$tm->mon,$tm->year); #----------------------------- ($day,$month,$year) = (localtime)[3,5]; printf("The current date is %04d %02d %02d/n",$year+1900,$month+1,$day); # The current date is 1998 04 28 #----------------------------- ($day,$year) = (localtime)[3..5]; #----------------------------- use Time::localtime; $tm = localtime; printf("The current date is %04d-%02d-%02d/n",$tm->year+1900,    ($tm->mon)+1,$tm->mday); # The current date is 1998-04-28 #----------------------------- printf("The current date is %04d-%02d-%02d/n",       sub {($_[5]+1900,$_[4]+1,$_[3])}->(localtime)); #----------------------------- use POSIX qw(strftime); print strftime "%Y-%m-%d/n",localtime; #----------------------------- Converting DMYHMS to Epoch Seconds #----------------------------- use Time::Local; $TIME = timelocal($sec,$min,$hours,$mday,$year); $TIME = timegm($sec,$year); #----------------------------- # $hours,$minutes,and $seconds represent a time today,# in the current time zone use Time::Local; $time = timelocal($seconds,(localtime)[3,5]); #----------------------------- # $day is day in month (1-31) # $month is month in year (1-12) # $year is four-digit year e.g.,1967 # $hours,$minutes and $seconds represent UTC time use Time::Local; $time = timegm($seconds,$day,$month-1,$year-1900); #----------------------------- Converting Epoch Seconds to DMYHMS #----------------------------- ($seconds,$day_of_month,$year,    $wday,$yday,$isdst) = localtime($time); #----------------------------- use Time::localtime;        # or Time::gmtime $tm = localtime($TIME);     # or gmtime($TIME) $seconds = $tm->sec; # ... #----------------------------- ($seconds,$isdst) = localtime($time); printf("Dateline: %02d:%02d:%02d-%04d/%02d/%02d/n",    $hours,$seconds,    $day_of_month); #----------------------------- use Time::localtime; $tm = localtime($time); printf("Dateline: %02d:%02d:%02d-%04d/%02d/%02d/n",    $tm->hour,$tm->min,$tm->sec,    $tm->mon+1,$tm->mday); #----------------------------- Adding to or Subtracting from a Date #----------------------------- $when = $Now + $difference; $then = $Now - $difference; #----------------------------- use Date::Calc qw(Add_Delta_Days); ($y2,$m2,$d2) = Add_Delta_Days($y,$m,$d,$offset); #----------------------------- use Date::Calc qw(Add_Delta_DHMS); ($year2,$month2,$day2,$h2,$s2) =     Add_Delta_DHMS( $year,$hour,$minute,$second,                $days_offset,$hour_offset,$minute_offset,$second_offset ); #----------------------------- $birthtime = 96176750;                  # 18/Jan/1973,3:45:50 am $interval = 5 +                         # 5 seconds             17 * 60 +                   # 17 minutes             2  * 60 * 60 +              # 2 hours             55 * 60 * 60 * 24;          # and 55 days $then = $birthtime + $interval; print "Then is ",scalar(localtime($then)),"/n"; # Then is Wed Mar 14 06:02:55 1973 #----------------------------- use Date::Calc qw(Add_Delta_DHMS); ($year,$hh,$mm,$ss) = Add_Delta_DHMS(     1973,1,18,3,45,50,# 18/Jan/1973,3:45:50 am              55,2,17,5); # 55 days,2 hrs,17 min,5 sec print "To be precise: $hh:$mm:$ss,$month/$day/$year/n"; # To be precise: 6:2:55,3/14/1973 #----------------------------- use Date::Calc qw(Add_Delta_Days); ($year,$day) = Add_Delta_Days(1973,55); print "Nat was 55 days old on: $month/$day/$year/n"; # Nat was 55 days old on: 3/14/1973 #----------------------------- Difference of Two Dates #----------------------------- $seconds = $recent - $earlIEr; #----------------------------- use Date::Calc qw(Delta_Days); $days = Delta_Days( $year1,$month1,$day1,$year2,$day2); #----------------------------- use Date::Calc qw(Delta_DHMS); ($days,$seconds) =   Delta_DHMS( $year1,$hour1,$minute1,$seconds1,  # earlIEr               $year2,$hour2,$minute2,$seconds2); # later #----------------------------- $bree = 361535725;          # 16 Jun 1981,4:35:25 $nat  =  96201950;          # 18 Jan 1973,3:45:50 $difference = $bree - $nat; print "There were $difference seconds between Nat and Bree/n"; # There were 265333775 seconds between Nat and Bree $seconds    =  $difference % 60; $difference = ($difference - $seconds) / 60; $minutes    =  $difference % 60; $difference = ($difference - $minutes) / 60; $hours      =  $difference % 24; $difference = ($difference - $hours)   / 24; $days       =  $difference % 7; $weeks      = ($difference - $days)    /  7; print "($weeks weeks,$days days,$hours:$minutes:$seconds)/n"; # (438 weeks,4 days,23:49:35) #----------------------------- use Date::Calc qw(Delta_Days); @bree = (1981,6,16);      # 16 Jun 1981 @nat  = (1973,18);      # 18 Jan 1973 $difference = Delta_Days(@nat,@bree); print "There were $difference days between Nat and Bree/n"; # There were 3071 days between Nat and Bree #----------------------------- use Date::Calc qw(Delta_DHMS); @bree = (1981,16,35,25);   # 16 Jun 1981,4:35:25 @nat  = (1973,50);   # 18 Jan 1973,3:45:50 @diff = Delta_DHMS(@nat,@bree); print "Bree came $diff[0] days,$diff[1]:$diff[2]:$diff[3] after Nat/n"; # Bree came 3071 days,0:49:35 after Nat #----------------------------- Day in a Week/Month/Year or Week Number #----------------------------- ($MONTHDAY,$WEEKDAY,$YEARDAY) = (localtime $DATE)[3,7]; $WEEKNUM = int($YEARDAY / 7) + 1; #----------------------------- use Date::Calc qw(Day_of_Week Week_Number Day_of_Year); # you have $year,and $day # $day is day of month,by deFinition. $wday = Day_of_Week($year,$day); $wnum = Week_Number($year,$day); $dnum = Day_of_Year($year,$day); #----------------------------- use Date::Calc qw(Day_of_Week Week_Number Day_of_Week_to_Text) $year  = 1981; $month = 6;         # (June) $day   = 16; $wday = Day_of_Week($year,$day); print "$month/$day/$year was a ",Day_of_Week_to_Text($wday),"/n"; ## see comment above $wnum = Week_Number($year,$day); print "in the $wnum week./n"; # 6/16/1981 was a Tuesday # # in week number 25. #----------------------------- Parsing Dates and Times from Strings #----------------------------- use Time::Local; # $date is "1998-06-03" (YYYY-MM-DD form). ($yyyy,$dd) = $date =~ /(/d+)-(/d+)-(/d+)/; # calculate epoch seconds at mIDnight on that day in this timezone $epoch_seconds = timelocal(0,$dd,$yyyy); #----------------------------- use Date::Manip qw(ParseDate UnixDate); $date = ParseDate($string); if (!$date) {     # bad date } else {     @values = UnixDate($date,@formats); } #----------------------------- use Date::Manip qw(ParseDate UnixDate); while (<>) {     $date = ParseDate($_);     if (!$date) {         warn "Bad date string: $_/n";         next;     } else {         ($year,$day) = UnixDate($date,"%Y","%d");         print "Date was $month/$day/$year/n";     } } #----------------------------- Printing a Date #----------------------------- $STRING = localtime($EPOCH_SECONDS); #----------------------------- use POSIX qw(strftime); $STRING = strftime($FORMAT,$SECONDS,$MINUTES,$HOUR,                   $DAY_OF_MONTH,$YEAR,                   $YEARDAY,$DST); #----------------------------- use Date::Manip qw(UnixDate); $STRING = UnixDate($DATE,$FORMAT); #----------------------------- # Sun Sep 21 15:33:36 1997 #----------------------------- use Time::Local; $time = timelocal(50,73); print "Scalar localtime gives: ",scalar(localtime($time)),"/n"; # Scalar localtime gives: Thu Jan 18 03:45:50 1973 #----------------------------- use POSIX qw(strftime); use Time::Local; $time = timelocal(50,73); print "strftime gives: ",strftime("%A %D",localtime($time)),"/n"; # strftime gives: Thursday 01/18/73 #----------------------------- use Date::Manip qw(ParseDate UnixDate); $date = ParseDate("18 Jan 1973,3:45:50"); $datestr = UnixDate($date,"%a %b %e %H:%M:%s %z %Y");    # as scalar print "Date::Manip gives: $datestr/n"; # Date::Manip gives: Thu Jan 18 03:45:50 GMT 1973 #----------------------------- High-Resolution Timers #----------------------------- use Time::HiRes qw(gettimeofday); $t0 = gettimeofday; ## do your operation here $t1 = gettimeofday; $elapsed = $t1 - $t0; # $elapsed is a floating point value,representing number # of seconds between $t0 and $t1 #----------------------------- use Time::HiRes qw(gettimeofday); print "Press return when ready: "; $before = gettimeofday; $line = <>; $elapsed = gettimeofday-$before; print "You took $elapsed seconds./n"; # Press return when ready: # # You took 0.228149 seconds. #----------------------------- require 'sys/syscall.ph'; # initialize the structures returned by gettimeofday $TIMEVAL_T = "LL"; $done = $start = pack($TIMEVAL_T,()); # prompt print "Press return when ready: "; # read the time into $start syscall(&SYS_gettimeofday,$start,0) != -1            || dIE "gettimeofday: $!"; # read a line $line = <>; # read the time into $done syscall(&SYS_gettimeofday,$done,0) != -1        || dIE "gettimeofday: $!"; # expand the structure @start = unpack($TIMEVAL_T,$start); @done  = unpack($TIMEVAL_T,$done); # fix microseconds for ($done[1],$start[1]) { $_ /= 1_000_000 }      # calculate time difference $delta_time = sprintf "%.4f",($done[0]  + $done[1]  )                                          -                               ($start[0] + $start[1] ); print "That took $delta_time seconds/n"; # Press return when ready: # # That took 0.3037 seconds #----------------------------- use Time::HiRes qw(gettimeofday); # take mean sorting time $size = 500; $number_of_times = 100; $total_time = 0; for ($i = 0; $i < $number_of_times; $i++) {     my (@array,$j,$begin,$time);     # populate array     @array = ();     for ($j=0; $j<$size; $j++) { push(@array,rand) }     # sort it     $begin = gettimeofday;     @array = sort { $a <=> $b } @array;     $time = gettimeofday-$begin;     $total_time += $time; } printf "On average,sorting %d random numbers takes %.5f seconds/n",    $size,($total_time/$number_of_times); # On average,sorting 500 random numbers takes 0.02821 seconds #----------------------------- Short Sleeps #----------------------------- select(undef,undef,$time_to_sleep); #----------------------------- use Time::HiRes qw(sleep); sleep($time_to_sleep); #----------------------------- while (<>) {     select(undef,0.25);     print; } #----------------------------- use Time::HiRes qw(sleep); while (<>) {     sleep(0.25);     print; } #----------------------------- Program: hopdelta #----------------------------- use Date::Manip qw(ParseDate DateCalc); $d1 = ParseDate("Tue,26 May 1998 23:57:38 -0400"); $d2 = ParseDate("Wed,27 May 1998 05:04:03 +0100"); print DateCalc($d1,$d2); # +0:0:0:0:0:6:25 #----------------------------- # download the following standalone program #!/usr/bin/perl # hopdelta - Feed mail header,produce lines #            showing delay at each hop. use strict; use Date::Manip qw (ParseDate UnixDate); # print header; this should really use format/write due to # printf complexitIEs printf "%-20.20s %-20.20s %-20.20s   %s/n",        "Sender","RecipIEnt","Time","Delta"; $/ = '';                # paragraph mode $_ = <>;                # read header s//n/s+/ /g;            # join continuation lines # calculate when and where this started my($start_from) = /^From.*/@([^/s>]*)/m; my($start_date) = /^Date:/s+(.*)/m; my $then = getdate($start_date); printf "%-20.20s %-20.20s %s/n",'Start',$start_from,fmtdate($then); my $prevfrom = $start_from; # Now process the headers lines from the bottom up for (reverse split(//n/)) {     my ($delta,$Now,$from,$by,$when);     next unless /^Received:/;     s//bon (.*?) (ID.*)/; $1/s;         # qmail header,I think     unless (($when) = /;/s+(.*)$/) {    # where the date falls         warn "bad received line: $_";         next;     }     ($from) = /from/s+(/S+)/;                ($from) = //((.*?)/)/ unless $from; # some put it here     $from =~ s//)$//;                   # someone was too greedy     ($by)   = /by/s+(/S+/./S+)/;        # who sent it on this hop     # Now random mungings to get their string parsable     for ($when) {         s/ (for|via) .*$//;         s/([+-]/d/d/d/d) /(/S+/)/$1/;         s/ID /S+;/s*//;     }     next unless $Now = getdate($when);          # convert to Epoch     $delta = $Now - $then;     printf "%-20.20s %-20.20s %s  ",fmtdate($Now);     $prevfrom = $by;     puttime($delta);     $then = $Now;                } exit; # convert random date strings into Epoch seconds sub getdate {     my $string     =  shift;     $string        =~ s//s+/(.*/)/s*$//;        # remove nonstd tz     my $date       =  ParseDate($string);     my $epoch_secs =  UnixDate($date,"%s");     return $epoch_secs; } # convert Epoch seconds into a particular date string sub fmtdate {     my $epoch = shift;     my($sec,$year) = localtime($epoch);     return sprintf "%02d:%02d:%02d %04d/%02d/%02d",            $hour,$sec,            $year + 1900,$mon + 1,} # take seconds and print in pleasant-to-read format sub puttime {     my($seconds) = shift;     my($days,$minutes);     $days    = pull_count($seconds,24 * 60 * 60);     $hours   = pull_count($seconds,60 * 60);     $minutes = pull_count($seconds,60);     put_fIEld('s',$seconds);     put_fIEld('m',$minutes);     put_fIEld('h',$hours);     put_fIEld('d',$days);     print "/n"; } # usage: $count = pull_count(seconds,amount) # remove from seconds the amount quantity,altering caller's version. # return the integral number of those amounts so removed. sub pull_count {     my($answer) = int($_[0] / $_[1]);     $_[0] -= $answer * $_[1];     return $answer; } # usage: put_fIEld(char,number) # output number fIEld in 3-place decimal format,with trailing char # suppress output unless char is 's' for seconds sub put_fIEld {     my ($char,$number) = @_;     printf " %3d%s",$number,$char if $number || $char eq 's'; } #----------------------------- # Sender               RecipIEnt            Time                   Delta # # Start                wall.org             09:17:12 1998/05/23 # # wall.org             mail.brainstorm.net  09:20:56 1998/05/23    44s   3m # # mail.brainstorm.net  jhereg.perl.com      09:20:58 1998/05/23     2s #   #-----------------------------

总结

以上是内存溢出为你收集整理的PLEAC-Perl 教程 - Date and Time (Perl进阶者极力推荐)全部内容,希望文章能够帮你解决PLEAC-Perl 教程 - Date and Time (Perl进阶者极力推荐)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1286366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存