[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进阶者极力推荐)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)