📄 datesandtimes.mht
字号:
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 <><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><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%"> </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 + -