SELFHTML: Perl / Funktionsreferenz / Funktionen für Datum und Uhrzeit
Author: Redaktion SELFHTML, selfhtml81@selfhtml.org
Description: Welche Funktionen es in Perl gibt, um einen Zeitpunkt zu ermitteln und ausgehend davon Datum und Uhrzeit.
Keywords: SELFHTML, Perl, Funktionen, Perl-Funktionen, Datum, Uhrzeit, Zeit, gmtime, localtime, time, ctime-Standard
Date: 2005-11-09T00:29:27+01:00

| # Funktionen für Datum und Uhrzeit
| Allgemeines zu diesen Funktionen gmtime - Zeitpunkt in Datums-/Uhrzeit-Elemente aufschlüsseln (Greenwich-Zeitzone) localtime - Zeitpunkt in Datums-/Uhrzeit-Elemente aufschlüsseln (lokale Zeitzone) time - Zeitpunkt ermitteln

## Allgemeines zu diesen Funktionen

Die Basisfunktion der Zeitberechnung unter Perl ist time. Sie ermittelt den aktuellen Zeitpunkt, und zwar in Sekunden, die seit dem logischen Unix-Urknall, seit dem 1.1.1970, 0.00 Uhr, vergangen sind. Mit dieser Zahl können Sie dann eine der Funktionen localtime oder gmtime versorgen, um die einzelnen Elemente von Datum und Uhrzeit des aktuellen Zeitpunkts zu erhalten, also etwa Tag, Monat, Jahr oder Stunden und Minuten der Uhrzeit.

Beachtenswert ist auch das Standardmodul `Time::Local`. Dort finden Sie Umkehrfunktionen zu den hier vorgestellten Funktionen localtime und gmtime.

## gmtime - Zeitpunkt in Datums-/Uhrzeit-Elemente aufschlüsseln (Greenwich-Zeitzone)

Funktioniert genauso wie localtime, mit dem einzigen Unterschied, dass nicht die Uhrzeit auf dem Rechner ermittelt wird, sondern die Greenwich-Zeit (Nullmeridian).

## localtime - Zeitpunkt in Datums-/Uhrzeit-Elemente aufschlüsseln (lokale Zeitzone)

Ermittelt für einen Zeitpunkt die einzelnen Zeitangaben.

Erwartet als Parameter:
1. die Anzahl Sekunden, gerechnet ab dem 1.1.1970, bis zum gewünschten Zeitpunkt. Um die Daten für den aktuellen Zeitpunkt zu ermitteln, einfach `time` oder gar nichts übergeben.

Gibt wahlweise eine Liste zurück, die aus 9 Elementen besteht, in denen die Einzeldaten gespeichert sind, oder eine Zeichenkette, gemäß der C-Funktion `ctime`, die zum ANSI-Standard gehört.

### Beispiel eines vollständigen CGI-Scripts in Perl:

Anzeigebeispiel: So sieht's aus (Zum Aufruf des Scripts ist eine Internet-Verbindung erforderlich)

    #!/usr/bin/perl -w

    use strict;
    use CGI::Carp qw(fatalsToBrowser);

    my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
        $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
    my $CTIME_String = localtime(time);
    $Monat+=1;
    $Jahrestag+=1;
    $Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
    $Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
    $Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
    $Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
    $Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden;
    $Jahr+=1900;
    my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
    my @Monatsnamen = ("","Januar","Februar","M&auml;rz","April","Mai","Juni",
               "Juli","August","September","Oktober","November","Dezember");

    print "Content-type: text/html\n\n";
    print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
    print "<html><head><title>Test-Ausgabe</title></head><body>\n";
    print "Datum (Variante 1): $Wochentage[$Wochentag], der $Monatstag.$Monat.$Jahr<br>\n";
    print "Datum (Variante 2): $Wochentage[$Wochentag], der $Monatstag. $Monatsnamen[$Monat] $Jahr<br>\n";
    print "Uhrzeit (Variante 1): $Stunden.$Minuten Uhr<br>\n";
    print "Uhrzeit (Variante 2): $Stunden.$Minuten:$Sekunden Uhr<br>\n";
    print "Der heutige Tag ist der $Jahrestag. Tag im laufenden Jahr<br>\n";
    print "Als CTIME-Ausgabe lautet dieser Zeitpunkt: $CTIME_String<br>\n";
    $Sommerzeit ? print "Es ist Sommerzeit\n" : print "Es ist Normalzeit (keine Sommerzeit)\n";
    print "</body></html>\n";

### Erläuterung:

Das Beispiel ermittelt die Zeitangaben des aktuellen Zeitpunkts, und zwar einmal im Listenkontext (erster Aufruf von `localtime`), und einmal im skalaren Kontext (zweiter Aufruf). Anschließend bereitet das Script die ermittelten Daten für die Ausgabe auf. Denn die zurückgegebenen Werte sind in vielen Fällen eher "Rohdaten", die für eine ordentliche Ausgabe noch nachbehandelt werden müssen.
Die Werte für `$Monat` und `$Jahrestag` werden zunächst um 1 erhöht, da der Rückgabewert intern bei 0 zu zählen beginnt (für Monate gelten anfangs die Monatsnummern 0 bis 11, und nicht 1 bis 12).
Dann werden diverse Angaben so formatiert, dass sie eine führende 0 erhalten, falls der Wert kleiner als 10 ist. Denn eine Uhrzeitangabe wie `8.1` ist wohl kaum erwünscht, es soll schließlich `08.01` ausgegeben werden. Erreicht wird dies mit Hilfe einer einfachen Entweder-Oder-Abfrage.
Die Jahreszahl wird um 1900 erhöht. Der Grund: der (numerische) Rückgabewert für das Jahr besteht in der Anzahl Jahre seit 1900. Für das Jahr 2000 würde also beispielsweise 100 zurückgegeben. Erst durch das Hinzuzählen von 1900 gelangt man zur tatsächlichen Jahreszahl.
Die dann definierten Listen für Wochentage und Monatsnamen bieten für die spätere Ausgabe die Möglichkeit, deutschsprachige Zeitbezeichnungen zu verwenden.
Das Beispielscript erstellt HTML-Code, um die ermittelten Daten auszugeben. Dabei kann sich das Script auf die nachbehandelten Daten verlassen.

## time - Zeitpunkt ermitteln

Ermittelt die Anzahl Sekunden, die vom 1.1.1970 0.00 Uhr bis zum Augenblick des Aufrufs vergangen sind.

Erwartet keinen Parameter.

Gibt die Anzahl Sekunden zurück.

### Beispiel eines vollständigen CGI-Scripts in Perl:

Anzeigebeispiel: So sieht's aus (Zum Aufruf des Scripts ist eine Internet-Verbindung erforderlich)

    #!/usr/bin/perl -w

    use strict;
    use CGI::Carp qw(fatalsToBrowser);

    my $Sekunden = time();
    my $Stunden = int($Sekunden / 3600);
    my $Tage = int($Sekunden / (24 * 3600));
    my $Wochen = int($Sekunden / (7 * 24 * 3600));

    print "Content-type: text/html\n\n";
    print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
    print "<html><head><title>Test-Ausgabe</title></head><body>\n";
    print "seit dem 1.1.1970, 0.00 Uhr sind $Sekunden Sekunden vergangen.<br>\n";
    print "Das sind $Stunden Stunden, $Tage Tage und $Wochen Wochen.\n";
    print "</body></html>\n";

### Erläuterung:

Das Beispiel ruft `time` auf und speichert den Rückgabewert der Funktion in den Skalar `$Sekunden`. Anschließend berechnet das Script aus der Sekundenzahl die darin enthaltenen Stunden, Tage und Wochen. Um jeweils nur die ganzzahligen Anteile der Bruchberechnungen zu erhalten, wird die Funktion int darauf angewendet. Zur Kontrolle gibt das Script HTML-Code mit den ermittelten Zahlen aus.

| Funktionen für Ein-/Ausgabe und Lesen/Schreiben von Daten
| Funktionen für die Kontrolle des laufenden Scripts

© 2007 Impressum