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

📄 datesandtimes.mht

📁 Perl 编程技巧大全。适合初学者阅读。
💻 MHT
📖 第 1 页 / 共 4 页
字号:
color=3D#00ffff>(</FONT>ParseDate DateCalc<FONT =
color=3D#00ffff>);</FONT>
$d1 =3D ParseDate<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"Tue, 26 May 1998 23:57:38 -0400"</FONT><FONT =
color=3D#00ffff>);</FONT>
$d2 =3D ParseDate<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"Wed, 27 May 1998 05:04:03 +0100"</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> DateCalc<FONT =
color=3D#00ffff>(</FONT>$d1, $d2<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe># +0:0:0:0:0:6:25
#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch03/hopdelta">download=
 the following standalone program</A></FONT>
#!/usr/bin/perl
# hopdelta - feed mail header, produce lines
#            showing delay at each hop.
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>strict</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>Date::Manip</FONT> <FONT color=3D#ff7f50>qw</FONT> <FONT =
color=3D#00ffff>(</FONT>ParseDate UnixDate<FONT =
color=3D#00ffff>);</FONT>

<FONT color=3D#bebebe># print header; this should really use =
format/write due to
# printf complexities
</FONT><FONT color=3D#ff7f50>printf</FONT> <FONT =
color=3D#00cd00>"%-20.20s %-20.20s %-20.20s   </FONT><FONT =
color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>\n"</FONT>,<FONT =
color=3D#43cd80> </FONT>
        <FONT color=3D#00cd00>"Sender"</FONT>, <FONT =
color=3D#00cd00>"Recipient"</FONT>, <FONT color=3D#00cd00>"Time"</FONT>, =
<FONT color=3D#00cd00>"Delta"</FONT><FONT color=3D#00ffff>;</FONT>
$/ =3D <FONT color=3D#00cd00>''</FONT><FONT color=3D#00ffff>;</FONT>     =
           <FONT color=3D#bebebe># paragraph mode
</FONT>$_ =3D &lt;&gt;<FONT color=3D#00ffff>;</FONT>                =
<FONT color=3D#bebebe># read header
</FONT><FONT color=3D#ff7f50>s</FONT>/\n\s+/ /g<FONT =
color=3D#00ffff>;</FONT>            <FONT color=3D#bebebe># join =
continuation lines
</FONT>
<FONT color=3D#bebebe># calculate when and where this started
</FONT><FONT color=3D#ffa500>my</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#9ac0cd>$start_from</FONT><FONT =
color=3D#00ffff>)</FONT> =3D /^From.*\@<FONT =
color=3D#00ffff>([</FONT>^\s&gt;<FONT color=3D#00ffff>]</FONT>*<FONT =
color=3D#00ffff>)</FONT>/<FONT color=3D#ff7f50>m</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$start_date</FONT><FONT color=3D#00ffff>)</FONT> =3D =
/^Date:\s+<FONT color=3D#00ffff>(</FONT>.*<FONT =
color=3D#00ffff>)</FONT>/<FONT color=3D#ff7f50>m</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$then</FONT> =3D =
getdate<FONT color=3D#00ffff>(</FONT>$start_date<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"%-20.20s =
%-20.20s </FONT><FONT color=3D#cdcd00>%s</FONT><FONT =
color=3D#00cd00>\n"</FONT>, <FONT color=3D#00cd00>'Start'</FONT>, =
$start_from, fmtdate<FONT color=3D#00ffff>(</FONT>$then<FONT =
color=3D#00ffff>);</FONT>

<FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$prevfrom</FONT> =
=3D $start_from<FONT color=3D#00ffff>;</FONT>

<FONT color=3D#bebebe># now process the headers lines from the bottom up
</FONT><FONT color=3D#ffa500>for</FONT> <FONT =
color=3D#00ffff>(</FONT><FONT color=3D#98fb98>reverse</FONT> <FONT =
color=3D#ff7f50>split</FONT><FONT color=3D#00ffff>(</FONT>/\n/<FONT =
color=3D#00ffff>))</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$delta</FONT>, <FONT color=3D#9ac0cd>$now</FONT>, <FONT =
color=3D#9ac0cd>$from</FONT>, <FONT color=3D#9ac0cd>$by</FONT>, <FONT =
color=3D#9ac0cd>$when</FONT><FONT color=3D#00ffff>);</FONT>
    <FONT color=3D#ffa500>next</FONT> <FONT =
color=3D#ffa500>unless</FONT> /^Received:/<FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ff7f50>s</FONT>/\bon <FONT =
color=3D#00ffff>(</FONT>.*?<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>(</FONT>id.*<FONT color=3D#00ffff>)</FONT>/<FONT =
color=3D#00ffff>;</FONT> $<FONT color=3D#cdcd00>1</FONT>/<FONT =
color=3D#ff7f50>s</FONT><FONT color=3D#00ffff>;</FONT>         <FONT =
color=3D#bebebe># qmail header, I think
</FONT>    <FONT color=3D#ffa500>unless</FONT> <FONT =
color=3D#00ffff>((</FONT>$when<FONT color=3D#00ffff>)</FONT> =3D /<FONT =
color=3D#00ffff>;</FONT>\s+<FONT color=3D#00ffff>(</FONT>.*<FONT =
color=3D#00ffff>)</FONT>$/<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>    <FONT color=3D#bebebe># where the date falls
</FONT>        <FONT color=3D#98fb98>warn</FONT> <FONT =
color=3D#00cd00>"bad received line: $_"</FONT><FONT =
color=3D#00ffff>;</FONT>
        <FONT color=3D#ffa500>next</FONT><FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#00ffff>}</FONT>
    <FONT color=3D#00ffff>(</FONT>$from<FONT color=3D#00ffff>)</FONT> =
=3D /from\s+<FONT color=3D#00ffff>(</FONT>\S+<FONT =
color=3D#00ffff>)</FONT>/<FONT color=3D#00ffff>;</FONT><FONT =
color=3D#43cd80>           </FONT>
    <FONT color=3D#00ffff>(</FONT>$from<FONT color=3D#00ffff>)</FONT> =
=3D /\<FONT color=3D#00ffff>((</FONT>.*?<FONT =
color=3D#00ffff>)</FONT>\<FONT color=3D#00ffff>)</FONT>/ <FONT =
color=3D#ffa500>unless</FONT> $from<FONT color=3D#00ffff>;</FONT> <FONT =
color=3D#bebebe># some put it here
</FONT>    $from =3D~ <FONT color=3D#ff7f50>s</FONT>/\<FONT =
color=3D#00ffff>)</FONT>$//<FONT color=3D#00ffff>;</FONT>                =
   <FONT color=3D#bebebe># someone was too greedy
</FONT>    <FONT color=3D#00ffff>(</FONT>$by<FONT =
color=3D#00ffff>)</FONT>   =3D /by\s+<FONT =
color=3D#00ffff>(</FONT>\S+\.\S+<FONT color=3D#00ffff>)</FONT>/<FONT =
color=3D#00ffff>;</FONT>        <FONT color=3D#bebebe># who sent it on =
this hop
</FONT>
    <FONT color=3D#bebebe># now random mungings to get their string =
parsable
</FONT>    <FONT color=3D#ffa500>for</FONT> <FONT =
color=3D#00ffff>(</FONT>$when<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
        <FONT color=3D#ff7f50>s</FONT>/ <FONT =
color=3D#00ffff>(</FONT><FONT color=3D#ffa500>for</FONT>|via<FONT =
color=3D#00ffff>)</FONT> .*$//<FONT color=3D#00ffff>;</FONT>
        <FONT color=3D#ff7f50>s</FONT>/<FONT =
color=3D#00ffff>([</FONT>+-<FONT color=3D#00ffff>]</FONT>\d\d\d\d<FONT =
color=3D#00ffff>)</FONT> \<FONT color=3D#00ffff>(</FONT>\S+\<FONT =
color=3D#00ffff>)</FONT>/$<FONT color=3D#cdcd00>1</FONT>/<FONT =
color=3D#00ffff>;</FONT>
        <FONT color=3D#ff7f50>s</FONT>/id \S+<FONT =
color=3D#00ffff>;</FONT>\s*//<FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#00ffff>}</FONT>
    <FONT color=3D#ffa500>next</FONT> <FONT =
color=3D#ffa500>unless</FONT> $now =3D getdate<FONT =
color=3D#00ffff>(</FONT>$when<FONT color=3D#00ffff>);</FONT>          =
<FONT color=3D#bebebe># convert to Epoch
</FONT>    $delta =3D $now - $then<FONT color=3D#00ffff>;</FONT>

    <FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>"%-20.20s =
%-20.20s </FONT><FONT color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>  =
"</FONT>, $from, $by, fmtdate<FONT color=3D#00ffff>(</FONT>$now<FONT =
color=3D#00ffff>);</FONT>
    $prevfrom =3D $by<FONT color=3D#00ffff>;</FONT>
    puttime<FONT color=3D#00ffff>(</FONT>$delta<FONT =
color=3D#00ffff>);</FONT>
    $then =3D $now<FONT color=3D#00ffff>;</FONT><FONT color=3D#43cd80>   =
            </FONT>
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#ffa500>exit</FONT><FONT color=3D#00ffff>;</FONT>

<FONT color=3D#bebebe># convert random date strings into Epoch seconds
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>getdate</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$string</FONT> =
    =3D  <FONT color=3D#ff7f50>shift</FONT><FONT =
color=3D#00ffff>;</FONT>
    $string        =3D~ <FONT color=3D#ff7f50>s</FONT>/\s+\<FONT =
color=3D#00ffff>(</FONT>.*\<FONT color=3D#00ffff>)</FONT>\s*$//<FONT =
color=3D#00ffff>;</FONT>        <FONT color=3D#bebebe># remove nonstd tz
</FONT>    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$date</FONT>       =3D  ParseDate<FONT =
color=3D#00ffff>(</FONT>$string<FONT color=3D#00ffff>);</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT =
color=3D#9ac0cd>$epoch_secs</FONT> =3D  UnixDate<FONT =
color=3D#00ffff>(</FONT>$date,<FONT color=3D#00cd00>"</FONT><FONT =
color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>"</FONT><FONT =
color=3D#00ffff>);</FONT>
    <FONT color=3D#ffa500>return</FONT> $epoch_secs<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#bebebe># convert Epoch seconds into a particular date =
string
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>fmtdate</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT color=3D#9ac0cd>$epoch</FONT> =
=3D <FONT color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$sec</FONT>,<FONT color=3D#9ac0cd>$min</FONT>,<FONT =
color=3D#9ac0cd>$hour</FONT>,<FONT color=3D#9ac0cd>$mday</FONT>,<FONT =
color=3D#9ac0cd>$mon</FONT>,<FONT color=3D#9ac0cd>$year</FONT><FONT =
color=3D#00ffff>)</FONT> =3D <FONT color=3D#98fb98>localtime</FONT><FONT =
color=3D#00ffff>(</FONT>$epoch<FONT color=3D#00ffff>);</FONT>
    <FONT color=3D#ffa500>return</FONT> <FONT =
color=3D#98fb98>sprintf</FONT> <FONT color=3D#00cd00>"%02d:%02d:%02d =
%04d/%02d/%02d"</FONT>,
    		$hour, $min, $sec,
    		$year + <FONT color=3D#cdcd00>1900</FONT>, $mon + <FONT =
color=3D#cdcd00>1</FONT>, $mday,
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#bebebe># take seconds and print in pleasant-to-read =
format
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>puttime</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$seconds</FONT><FONT color=3D#00ffff>)</FONT> =3D <FONT =
color=3D#ff7f50>shift</FONT><FONT color=3D#00ffff>;</FONT>
    <FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$days</FONT>, <FONT color=3D#9ac0cd>$hours</FONT>, <FONT =
color=3D#9ac0cd>$minutes</FONT><FONT color=3D#00ffff>);</FONT>
    $days    =3D pull_count<FONT color=3D#00ffff>(</FONT>$seconds, <FONT =
color=3D#cdcd00>24</FONT> * <FONT color=3D#cdcd00>60</FONT> * <FONT =
color=3D#cdcd00>60</FONT><FONT color=3D#00ffff>);</FONT>
    $hours   =3D pull_count<FONT color=3D#00ffff>(</FONT>$seconds, <FONT =
color=3D#cdcd00>60</FONT> * <FONT color=3D#cdcd00>60</FONT><FONT =
color=3D#00ffff>);</FONT>
    $minutes =3D pull_count<FONT color=3D#00ffff>(</FONT>$seconds, <FONT =
color=3D#cdcd00>60</FONT><FONT color=3D#00ffff>);</FONT>
    put_field<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'s'</FONT>, $seconds<FONT color=3D#00ffff>);</FONT>
    put_field<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'m'</FONT>, $minutes<FONT color=3D#00ffff>);</FONT>
    put_field<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'h'</FONT>, $hours<FONT color=3D#00ffff>);</FONT>
    put_field<FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>'d'</FONT>, $days<FONT color=3D#00ffff>);</FONT>
    <FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#00cd00>"\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#bebebe># usage: $count =3D pull_count(seconds, amount)
# remove from seconds the amount quantity, altering caller's version.
# return the integral number of those amounts so removed.
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>pull_count</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$answer</FONT><FONT color=3D#00ffff>)</FONT> =3D <FONT =
color=3D#98fb98>int</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdad00>$_</FONT><FONT color=3D#00ffff>[</FONT><FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>]</FONT> / <FONT =
color=3D#cdad00>$_</FONT><FONT color=3D#00ffff>[</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>]);</FONT>
    <FONT color=3D#cdad00>$_</FONT><FONT color=3D#00ffff>[</FONT><FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>]</FONT> -=3D $answer * =
<FONT color=3D#cdad00>$_</FONT><FONT color=3D#00ffff>[</FONT><FONT =
color=3D#cdcd00>1</FONT><FONT color=3D#00ffff>];</FONT>
    <FONT color=3D#ffa500>return</FONT> $answer<FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#bebebe># usage: put_field(char, number)
# output number field in 3-place decimal format, with trailing char
# suppress output unless char is 's' for seconds
</FONT><FONT color=3D#ffa500>sub</FONT> <FONT =
color=3D#b2dfee>put_field</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>my</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#9ac0cd>$char</FONT>, <FONT color=3D#9ac0cd>$number</FONT><FONT =
color=3D#00ffff>)</FONT> =3D <FONT color=3D#cdad00>@_</FONT><FONT =
color=3D#00ffff>;</FONT>
    <FONT color=3D#ff7f50>printf</FONT> <FONT color=3D#00cd00>" =
%3d</FONT><FONT color=3D#cdcd00>%s</FONT><FONT color=3D#00cd00>"</FONT>, =
$number, $char <FONT color=3D#ffa500>if</FONT> $number || $char <FONT =
color=3D#98fb98>eq</FONT> <FONT color=3D#00cd00>'s'</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#00ffff>}</FONT>

<FONT color=3D#bebebe>#-----------------------------
# Sender               Recipient            Time                   Delta
#</FONT><FONT color=3D#43cd80> </FONT><FONT color=3D#bebebe>
# Start                wall.org             09:17:12 1998/05/23
#</FONT><FONT color=3D#43cd80> </FONT><FONT color=3D#bebebe>
# wall.org             mail.brainstorm.net  09:20:56 1998/05/23    44s   =
3m
#</FONT><FONT color=3D#43cd80> </FONT><FONT color=3D#bebebe>
# mail.brainstorm.net  jhereg.perl.com      09:20:58 1998/05/23     2s
#</FONT><FONT color=3D#43cd80>  </FONT><FONT color=3D#bebebe>
#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV class=3DNAVFOOTER>
<HR align=3Dleft width=3D"100%">

<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%"=20
summary=3D"Footer navigation table" border=3D0>
  <TBODY>
  <TR>
    <TD vAlign=3Dtop align=3Dleft width=3D"33%"><A accessKey=3DP=20
      =
href=3D"http://pleac.sourceforge.net/pleac_perl/numbers.html">Prev</A></T=
D>
    <TD vAlign=3Dtop align=3Dmiddle width=3D"34%"><A accessKey=3DH=20
      =
href=3D"http://pleac.sourceforge.net/pleac_perl/index.html">Home</A></TD>=

    <TD vAlign=3Dtop align=3Dright width=3D"33%"><A accessKey=3DN=20
      =
href=3D"http://pleac.sourceforge.net/pleac_perl/arrays.html">Next</A></TD=
></TR>
  <TR>
    <TD vAlign=3Dtop align=3Dleft width=3D"33%">Numbers</TD>
    <TD vAlign=3Dtop align=3Dmiddle width=3D"34%">&nbsp;</TD>
    <TD vAlign=3Dtop align=3Dright=20
width=3D"33%">Arrays</TD></TR></TBODY></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

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