Gernot Weber: Laufende Zahl in Datum umwandeln

Hallo Zusammen!

Ich habe folgendes Problem und stehe auf dem Schlauch bzw. finde keinen Einstieg.

Aus einer Datei lese ich eine vierstellige Zahl aus.
Die Zahl steht jeweils für ein Datum und wird für jeden
weiteren Tag "eins hochgedreht".
z.B. 9642 = 22.07.2000
     9643 = 23.07.2000
     9644 = 24.07.2000  usw...
Nun möchte ich die Zahl in das jeweilige Datum umwandeln.
Hat jemand eine Idee?

Viele Grüsse
Gernot

  1. Hi,

    Aus einer Datei lese ich eine vierstellige Zahl aus.
    Die Zahl steht jeweils für ein Datum und wird für jeden
    weiteren Tag "eins hochgedreht".
    z.B. 9642 = 22.07.2000
         9643 = 23.07.2000
         9644 = 24.07.2000  usw...
    Nun möchte ich die Zahl in das jeweilige Datum umwandeln.
    Hat jemand eine Idee?

    my $time = 9642;
    my $starttime = 42; # Das mußt Du noch selbst ermitteln! Dürfte ein ziemlich hoher Wert sein.
    my $datum = localtime($time*3600*24+$starttime);

    Mehr zur Datumsformatierung unter

    perldoc -f localtime

    Cheatah

    1. Hi Cheatah,

      Vielen Dank!
      So komme ich klar!

      Gruss Gernot

  2. Hallo

    Ich habe folgendes Problem und stehe auf dem Schlauch bzw. finde keinen Einstieg.

    Aus einer Datei lese ich eine vierstellige Zahl aus.
    Die Zahl steht jeweils für ein Datum und wird für jeden
    weiteren Tag "eins hochgedreht".
    z.B. 9642 = 22.07.2000
         9643 = 23.07.2000
         9644 = 24.07.2000  usw...
    Nun möchte ich die Zahl in das jeweilige Datum umwandeln.
    Hat jemand eine Idee?

    Also, so etwas sollte ziemlich einfach sein, und deshalb solltest du nach dem SELF (selber) prinzip vorgehen...

    Ich hab im moment keine zeit mir darüber den kopf zu zerbrechen, vielleicht findest du ja jemanden der dir so ein script macht...

    Ausserdem haben CGI und JavaScript eigene "Datumszähler". wieso verwendest du die nicht ???

    1. Hallo Eckhart!

      Also, so etwas sollte ziemlich einfach sein,

      Wenn es das (für mich) wäre, würde ich die Frage hier nicht posten.

      und deshalb solltest du nach dem SELF (selber) prinzip vorgehen...

      das tue ich, bevor ich hier etwas poste.

      Ich hab im moment keine zeit mir darüber den kopf zu zerbrechen, vielleicht findest du ja jemanden der dir so ein script macht...

      Ausserdem haben CGI und JavaScript eigene "Datumszähler". wieso verwendest du die nicht ???

      JavaScript geht hier nicht. Was heisst "cgi hat eigenen Datumszähler"?

      Viele Grüsse
      Gernot

      1. hallo

        Ich wusste doch das ich sonne antwort kriege. Ich versuche immer mein bestes zu geben, aber manchmal sag ich sachen die ich nicht sagen sollte. (das tue ich sehr oft). Kaum hab ichs gesagt, bereue ich es...

        Manchmal gehe ich Leuten auch echt auf die Nerven, Ich hasse das. Aber ich kann es leider nicht ändern... :-(

        1. Hi!

          Ich wusste doch das ich sonne antwort kriege. Ich versuche immer mein bestes zu geben, aber manchmal sag ich sachen die ich nicht sagen sollte. (das tue ich sehr oft).

          Na dann gib mal Dein Bestes:
          Wie ist das mit dem "Datumszähler" unter cgi.
          Sagt mir nichts? Würde mich aber interessieren!
          Meinst Du wirklich cgi???

          Kaum hab ichs gesagt, bereue ich es...

          Na, na, nun mal der Reue nicht zuviel!

          Gruss
          Gernot :-)

          1. Hi!

            Na dann gib mal Dein Bestes:
            Wie ist das mit dem "Datumszähler" unter cgi.
            Sagt mir nichts? Würde mich aber interessieren!
            Meinst Du wirklich cgi???

            Er meint wohl vielmehr Perl. Es gibt dort die Funktion time(), die Dir die Anzahl der vergangenen Sekunden seit 1.1.1970 zurueckgibt. Derzeit ist der Zaehlerstand bei 964529026. Mit der Funktion localtime() kannst Du das in einem lesbaren Format ausgeben (oder andere Sachen machen, siehe perldoc -f localtime).

            Hier setzt Cheatah's Antwort an. Er will naemlich Deinen eigenen Zaehler in den von Perl verwendeten Timestamp umrechnen. Dazu muss der Startpunkt Deines Zaehlers in Sekunden seit 1970 bekannt sein (den musst Du noch rausfinden; Cheatah hat dafuer einfach 42 eingesetzt; duerfte aber wohl eher bei 131241600 liegen, was dem 28.02.1974 entspricht). Auf diesen Startpunkt addierst Du Deine Zahl, nachdem Du die Tage in Sekunden umgerechnet hast (*24*3600). Und dann kannst Du die Perl-Funktionen localtime() und gmtime() benutzten.

            Oder, falls Dir das moeglich ist, vergisst Du Deine eigenes System und arbeitest in Zukunft gleich mit den von Perl verwendeten Zeitstempeln (ist weit verbreitet auf Unix-Systemen, wird nicht nur von Perl verwendet), das waere wohl der bessere Weg.

            So long

            1. Hi!

              Vielem Dank für die ausführliche Erklärung.
              Hatte aber schon kapiert was Cheatah wollte.
              Mir fehlte halt nur der richtige Ansatz.

              Oder, falls Dir das moeglich ist, vergisst Du Deine eigenes System und arbeitest in Zukunft gleich mit den von Perl verwendeten
              Zeitstempeln (ist weit verbreitet auf Unix-Systemen, wird nicht nur von Perl verwendet), das waere wohl der bessere Weg.

              Geht leider nicht, da die ausgelesenen Ziffern aus fremden Dateien
              kommen und das Format somit vorgegeben ist.

              Gruss
              Gernot

  3. hallo,
    versuchs mal mit 'Date::Manip'.

    Dort gibts eine Funktion, die heißt DateCalc.
    also
    $aktdate = &DateCalc($referenzdatum, " + $anzahl_tage days",$err):

    hab ich so aus der Doku abgemalt. nicht getestet.

    hoffe, es hat geholfen.
    klaus

    1. Hi Klaus!

      Danke werde ich mal testen!

      Gruss Gernot