Jörg Wittemeier: cgi - Datum und Zeit

Hi !

Mit dem Befehl
$nowinsec = time();
erhält man bekanntlich die aktuelle Zeit
ab dem 01.01. 1970 in Sekunden. (oder Millisekunden?)

Mit
$now = localtime($nowinsec);
wird daraus "Fri Jun 13 20:29:11 1997".

Meine Frage:
wie mache ich aus "Fri Jun 13 20:29:11 1997".
wieder Sekunden (bzw. Millisekunden)??

Gibt es einen Befehl dafür oder muß man rechnen?

Gruß
Jörg

  1. Hi,

    $nowinsec = time();
    erhält man bekanntlich die aktuelle Zeit
    ab dem 01.01. 1970 in Sekunden. (oder Millisekunden?)

    Sekunden ist schon richtig.

    wie mache ich aus "Fri Jun 13 20:29:11 1997".
    wieder Sekunden (bzw. Millisekunden)??

    Prüf mal, ob Du auf dem Server eine timelocal.pl hast, die übernimmt das! Du mußt die Datei per require einbinden, der Aufruf ist dann
    $nowinsec = timelocal($sec,$min,$hour,$day,$mon,$year); # $mon e [0..11]

    Cheatah

    1. Hallo !!

      Sekunden ist schon richtig.

      --------- ha ! dachte ich mir, aber in selfhtml steht millisekunden.

      Prüf mal, ob Du auf dem Server eine timelocal.pl

      --------- wie überprüfe ich ob auf dem server eine timelocal.pl habe?? In meinem cgi-verzeichnis ist keine.

      Du mußt die Datei per require einbinden,

      --------- was heißt per require?

      $nowinsec = timelocal($sec,$min,$hour,$day,$mon,$year); # $mon e [0..11] <---- ????

      --------- habe das einfachmal eingefügt und natürlich vorab $sec bis $year definiert. Kommt keine Fehlermeldung aber auch kein Ergebnis. Komischerweise wird das cgi-Programm ab dieser Stelle beendet.

      Tut mir leid, aber mein Wissen ist stark beschränkt :-(
      Dachte es gibt einen einfachen Aufruf.
      gruß
      Jörg

      1. hi!

        Prüf mal, ob Du auf dem Server eine timelocal.pl
        wie überprüfe ich ob auf dem server eine timelocal.pl habe?? In meinem cgi-verzeichnis ist keine.

        Es gibt keine timelocal.pl. Es ist ein Modul. Du musst es per use einbinden:
          user Time::Local;

        Dann kannst du auf die darin definierten Funktionen zugreifen.

        use Time::Local;
        $time = timelocal($sec, $min, $hours, $mday, $mon, $year);

        Du mußt die Datei per require einbinden,
        was heißt per require?

        Ein wenig Perl sollte man schon beherrschen, bevor man anfängt zu programmieren...

        1. Hi,

          Ein wenig Perl sollte man schon beherrschen, bevor man anfängt zu programmieren...

          nicht so hart sein, Frank! Wir haben alle mal angefangen, und auch mich kann man noch mit Befehlen überraschen... ;-)

          Cheatah

          1. Hallo Cheatah !

            Ein wenig Perl sollte man schon beherrschen, bevor man anfängt zu programmieren...

            nicht so hart sein, Frank! Wir haben alle mal angefangen, und auch mich kann man noch mit Befehlen überraschen... ;-)

            -------Danke für die Ehrenrettung  :-))
            Learning by doing hat halt so seine Tücken.
            Mir fehlt noch gute deutsche Lektüre. Nur "selfhtml" ist ein bischen wenig (betr. Perl).
            Aber immerhin hat es für Gästebucher, Counter mit Statistik, 2 Shop-Systeme uvm gereicht.  :-))
            Die Shop-Systeme sind unter shop.goby.net
            zu bewundern. :-)) Wenn Du mal Lust und Zeit hast....
            Anregungen und Kritik würden mich freuen.
            Danke nochmal. Die Lösung hat Frank genannt.
            "use Time::Local;"
            funzt tadellos.
            Gruß
            Jörg

            1. Hi Jörg,

              -------Danke für die Ehrenrettung  :-))

              nicht der Rede wert ;-)

              Learning by doing hat halt so seine Tücken.

              Da hast Du leider recht. Man ist davon abhängig, was man irgendwoher kennt - die "richtigen" Dokus hat man entweder nicht, oder (gerade bei Perl) sind sie absolut unverständlich...

              Mir fehlt noch gute deutsche Lektüre. Nur "selfhtml" ist ein bischen wenig (betr. Perl).

              Leider! SelfHTML bietet einiges, was für den Perl-Hausgebrauch reicht, aber in diesem Bereich stößt man hier schneller auf die Grenzen als in anderen. Mir fehlen eigentlich vor allem eine Seite, auf der die regulären Ausdrücke mit allen Parametern und Effekten (nicht nur die "paar Dutzend" Beispiele) erklärt werden, sowie eine "Tips & Tricks"-Seite, wo alle möglichen immer wieder auftretenden Probleme gelöst werden (z.B. String in Kleinschrift umwandeln usw... ist zwar gerade mal ein sehr einfaches Beispiel, aber man kann ja auch längere Routinen/Tools anbieten! Eine Erweiterung von exp() mit beliebigen Basen beispielsweise, die ich gerade für Ganzzahlexponenten rekursiv selbst geschrieben habe... auch im Prinzip einfach, aber man kommt halt nicht immer auf jede Lösung!)
              Stefan, wären diese Seiten (mit unserer Hilfe natürlich!) für eine v7.1 denkbar?

              Aber immerhin hat es für Gästebucher, Counter mit Statistik, 2 Shop-Systeme uvm gereicht.  :-))
              Die Shop-Systeme sind unter shop.goby.net
              zu bewundern. :-)) Wenn Du mal Lust und Zeit hast....

              Mit Shop-Systemen habe ich mich noch nicht beschäftigt, dazu kann ich also wenig sagen... aber der Counter würde mich momentan am meisten interessieren, das Guestbook kommt dann wahrscheinlich als nächstes ;-)

              Anregungen und Kritik würden mich freuen.

              Wie gesagt, beim Shop bringt das wenig... aber zu den anderen sage ich gerne etwas (per eMail)! Wo finde ich die? Mail mal 'ne URL...

              Cheatah

              1. hi!

                Mir fehlt noch gute deutsche Lektüre. Nur "selfhtml" ist ein bischen wenig (betr. Perl).
                Leider! SelfHTML bietet einiges, was für den Perl-Hausgebrauch reicht, aber in diesem
                Bereich stößt man hier schneller auf die Grenzen als in anderen. Mir fehlen eigentlich vor
                allem eine Seite, auf der die regulären Ausdrücke mit allen Parametern und Effekten (nicht
                nur die "paar Dutzend" Beispiele) erklärt werden, sowie eine "Tips & Tricks"-Seite, wo alle
                möglichen immer wieder auftretenden Probleme gelöst werden (z.B. String in Kleinschrift
                umwandeln usw...

                Darüber werden ganze Bücher geschrieben. Und die findet man selten online, weil der Verlag bzw. der Autor ja etwas damit verdienen will.
                Hier ein paar Bücher in Bezug auf Perl-Programmierung:

                *Programmieren mit Perl*
                DAS Standardwerk: die Übersetzung der 2. Auflage von "Programming Perl", der Perl-Bibel AKA Kamel-Buch. Dieses Buch sollte jeder haben, der sich ernsthaft mit Perl auseinandersetzen will. Geschrieben vom Perl-Erfinder Larry Wall. O'Reilly Verlag, DM 89,-
                http://www.oreilly.de/german/prog/perlprog/index.html

                *Perl Cookbook* (bis jetzt nur englisch)
                Genau das, was du suchst. Hier findest du alle möglichen Probleme zu Perl mit Lösungen und Erklärungen. Ich finde das sehr nützlich. O'Reilly Verlag, $ 39,95
                http://www.oreilly.de/catalog/cookbook/

                *Reguläre Ausdrücke*
                400 Seiten voll. Ein ganzes Buch nur über reguläre Ausdrücke. O'Reilly Verlag, DM 59,-
                http://www.oreilly.de/german/prog/regex/index.html

                Eine Online-Einführung in Perl findet ihr unter folgender URL:
                http://www.phy.uni-bayreuth.de/~btpa25/perl/perl_inhalt.html

                bye, Frank!

                1. Hi Frank !!
                  Da bleibt nur noch ein schlichtes "Danke-Schön" für die Bücher Tips. (gerade ausgedruckt)
                  Gruß
                  Jörg

                  1. Hi auch,

                    Da bleibt nur noch ein schlichtes "Danke-Schön" für die Bücher Tips. (gerade ausgedruckt)

                    dem schließe ich mich (inkl. den letzten beiden Worten) kommentarlos an :-)

                    Cheatah

        2. Hi Frank !!

          use Time::Local;
          $time = timelocal($sec, $min, $hours, $mday, $mon, $year);

          ------ das war‚s !!! funzt tadellos. danke.

          Ein wenig Perl sollte man schon beherrschen, bevor man anfängt zu programmieren...

          ------ was soll ich dazu sagen :-))
          ich habe einfach angefangen, um irgendwann Perl zu beherrschen.

          Nochmals besten Dank
          Jörg

          1. Hi Jörg,

            ich habe einfach angefangen, um irgendwann Perl zu beherrschen.

            jepp, wie sollte es auch anders sein? :-)
            Anfangs hat man keine Vorstellung, was eigentlich der Unterschied zwischen Perl und CGI ist oder ob beide überhaupt etwas miteinander zu tun haben, dann bekommt man von irgendwo ein Perl-Script, versucht das irgendwie anzupassen, und plötzlich programmiert man selbst... so war es jedenfalls bei mir ;-)

            Cheatah

      2. Hi,

        Sekunden ist schon richtig.
        --------- ha ! dachte ich mir, aber in selfhtml steht millisekunden.

        Stefan!!! *ruf* Korrektur!!! :-)))

        Prüf mal, ob Du auf dem Server eine timelocal.pl
        --------- wie überprüfe ich ob auf dem server eine timelocal.pl habe?? In meinem cgi-verzeichnis ist keine.

        Ich glaube, der Befehl heißt "where timelocal.pl". Du kannst aber auch mal nach /usr/bin gehen (oder wo immer der Perl-Interpreter sitzt) und dort mit "ls timelocal.pl" direkt schauen. Das ganze geht natürlich nur, wenn Du eine Telnet-Verbindung zum Server aufbauen kannst, andernfalls nimm den Pfad zum Perl-Interpreter und ersetze "Perl" durch "timelocal.pl". Dann mußt Du nur noch...

        Du mußt die Datei per require einbinden,
        --------- was heißt per require?

        ...nach der ersten Zeile schreiben:
        require "/usr/bin/timelocal.pl";

        $nowinsec = timelocal($sec,$min,$hour,$day,$mon,$year); # $mon e [0..11] <---- ????
        --------- habe das einfachmal eingefügt und natürlich vorab $sec bis $year definiert. Kommt keine Fehlermeldung aber auch kein Ergebnis. Komischerweise wird das cgi-Programm ab dieser Stelle beendet.

        Wenn timelocal.pl nicht eingebunden ist, wird nach der (nicht gefundenen) Routine abgebrochen. Fehlermeldung gibt's keine, weil auch "perl -c script.pl" nicht die requires überprüft und eben einfach davon ausgegangen wird, daß irgendwo eine sub timelocal steht. Ist dies nicht der Fall, beendet das Programm kommentarlos.
        Übrigens ist ein unerwartetes "fehlerloses" Abbrechen auch ein gutes Anzeichen dafür, daß Du eine Routine ansprechen wolltest, die nicht existiert - meist ein einfacher Tippfehler!

        Tut mir leid, aber mein Wissen ist stark beschränkt :-(

        Wird ständig größer ;-)

        Dachte es gibt einen einfachen Aufruf.

        Im Prinzip schon, erwartet nur etwas Vorarbeit. Aber das kriegen wir schon hin!

        Cheatah

        1. hi!

          ...nach der ersten Zeile schreiben:
          require "/usr/bin/timelocal.pl";

          Nochmal: es ist ein Modul und heißt timelocal.pm. Module werden per use eingebunden.

          bye, Frank!

          1. Hi Frank,

            require "/usr/bin/timelocal.pl";
            Nochmal: es ist ein Modul und heißt timelocal.pm. Module werden per use eingebunden.

            oh, bei mir ist es ein Script, dessen Quelltext ich direkt einsehen kann...

            Cheatah

            1. hi!

              require "/usr/bin/timelocal.pl";
              Nochmal: es ist ein Modul und heißt timelocal.pm. Module werden per use eingebunden.
              oh, bei mir ist es ein Script, dessen Quelltext ich direkt einsehen kann...

              Bei Modulen ist auch der Quelltext einsehbar, nur dass sie mit package <MODULNAME>; beginnen und die Endung .pm haben.

              bye, Frank!

              1. Hi,

                Bei Modulen ist auch der Quelltext einsehbar, nur dass sie mit package <MODULNAME>; beginnen und die Endung .pm haben.

                naja, auch wieder wahr... jedenfalls binde ich es bei mir über "require" ein, und es funktioniert einwandfrei :-)))

                Cheatah

                1. hi!

                  Bei Modulen ist auch der Quelltext einsehbar, nur dass sie mit package
                  <MODULNAME>; beginnen und die Endung .pm haben.
                  naja, auch wieder wahr... jedenfalls binde ich es bei mir über "require" ein, und es
                  funktioniert einwandfrei :-)))

                  use ist leistungsfähiger als require. Siehe dazu auch http://www.phy.uni-bayreuth.de/~btpa25/perl/perl_perl.html#use.

                  bye, Frank!

                  1. Hi,

                    use ist leistungsfähiger als require. Siehe dazu auch http://www.phy.uni-bayreuth.de/~btpa25/perl/perl_perl.html#use.

                    aha, th@nx for info!

                    Cheatah

        2. Hallo Cheatah,

          Stefan!!! *ruf* Korrektur!!! :-)))

          Iss schon klar, den Fehler hab ich bereits in der Liste der naechsten Korrekturen.

          viele Gruesse
            Stefan Muenz