7.7. Datum und Zeit
Mit Hilfe des Operators "time" kann man jederzeit die aktuelle Systemzeit. Der Operator liefert die Sekunden seit 00:00:00 1.1.1970 GMT zurück. Um diese wieder umzurechnen stehen die Funktionen "localtime" bzw. "gmtime" zur Verfügung. Ein Aufruf schaut in Perl wie folgt aus:

     ($sec, $min, $std, $tag, $mon, $jahr, $wochentag, $tagDesJahres, $zeitentf) = localtime(time);

Dabei gilt aber, dass
  • Der Monat bei "0" beginnt -> $mon+=1
  • Das Jahr bei 1900 beginnt, d.h. $jahr+=1900
  • Die Entfernung zu GMT als Differenz in $zeitenf abgelegt ist

Ein Zugriff kann wie folgt erfolgen:

     print "heute ist der ",localtime(time)[7],". Tag des Jahres ".localtime(time)[5]+1900."\n";

Wenn man mehrere Werte parallel zuweisen möchte, geht das wie folgt:
     
     ($stunde, $monat, $wtag) = localtime[2,4,6];

Wenn man ein Datum in "Epochensekunden" umrechnen will, muss man ein zusätzliches Perl- Modul laden:

      use Time::Local;

damit stehen die Funktionen "timelocal()" und "timegmt()" zur Verfügung:

           $epochensec=timelocal($sek, $min, $std, $tag, $monat, $jahr);
            # Achtung: an $monat-1 und $jahr-1900 denken!

Wenn ein Datum aus einem Webserverlog umgerechnet werden soll, kann dies wie folgt erfolgen:

#!/usr/bin/perl
use Time::Local;
$datestring= "[07/Aug/2003:15:01:28 +0200]";

%mnr=('Jan', 1, 'Feb', 2, 'Mar', 3, 'Apr', 4, 'Mai', 5, 'Jun', 6, 'Jul', 7, 'Aug', 8, 'Sep', 9, 'Oct', 10, 'Nov', 11, 'Dec', 12);
@wday=('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');

($tag, $monatstr, $jahr, $stunde, $minute, $sekunde) =
    ( $datestring =~  m|\[(\d+)/(\w+)/(\d+):(\d+):(\d+):(\d+) [+-]\d+]| );
$monat=$mnr{$monatstr};
print "$tag.$monat.$jahr - $stunde:$minute:$sekunde ";

$monat-=1;
$jahr-=1900;
$epoch=timelocal($sekunde, $minute, $stunde, $tag, $monat, $jahr);
print "  -  $epoch -  ";

($s, $m, $h, $d, $mn, $j, $wd) = (localtime($epoch))[0..6];
$mn++;
$j+=1900;
$wdstring=$wday[$wd];
print "$wdstring $d.$mn.$j - $h:$m:$s \n";