Connie: "2000" statt "19100" - die $year unter PERL anpassen

Hallo!

Wer von Euch Scripte einsetzt, die in PERL geschrieben sind und das Datum in der inzwischen bekannten Form "19100" anzeigen statt "2000", der kann das leicht ändern.

Sucht in den Scripten nach einem String:

$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

danach ist die $year bekannt und hat zur Zeit den Wert "100"

wenn Ihr danach folgendes einbaut:

if ($year > 99) {$year = substr($year,1,2);}

ist sie auf "00" reduziert

anschließend sucht mal nach Strings wie:

$long_date = " $mday. $months[$mon] 19$year";

oder

$date = "$days[$wday], $mday. $months[$mon] 19$year um $hour:$min:$sec";

dann braucht Ihr nur noch die 19 durch die 20 ersetzen und habt eine besser Ausgabe der Jahreszahl.

Diese (inzwischen) falsche Ausgabe ist z.B. im GUESTBOOK.CGI von Selena Sol oder im WWWBOARD.CGI von Matt Wright, aber auch in Linklisten-SCripten etc. aufgetreten

wenn Ihr die geänderten Scripte anschließend im ASCII-Modus wieder hochlädt, sollte eigentlich alles stimmen!

(ich muß das jetzt tun....)

tschüß
Connie

  1. anschließend sucht mal nach Strings wie:
      $long_date = " $mday. $months[$mon] 19$year";
    oder
       $date = "$days[$wday], $mday. $months[$mon] 19$year um $hour:$min:$sec";
    dann braucht Ihr nur noch die 19 durch die 20 ersetzen und habt eine besser Ausgabe der Jahreszahl.

    Tja, solche Ersetzungen sind halt leider nicht das Allheilmittel.
    ("$jahr += 1900;" in Perl direkt nach $localtime() und nirgendwo mehr String-Concat mit Datumswerten ist eines. ;-)

    Ich hatte gerade so ein Spasseken in Oracle: SQL*Forms-Masken mit Eingabeformat "DD-MON-YY" (das ist das Default-Format von Oracle7, wenn man selbst keines angibt).
    Gibt man "01-JAN-00" in ein solches Feld ein, dann ergänzt der Forms-Interpreter brav auf "2000" - soweit, so gut, das hatten wir auch getestet.
    Aber editiert man bereits vorhandene Datensätze aus dem Jahre 1999, dann interpretiert SQL*Forms das von ihm *selbst* zweistellig ausgegebene Datum als Quasi-Eingabe wieder neu neu und rät dabei (diesmal falsch) eine "20" davor - und schon sind wir in 2099. :-(((
    Weil das Datum zum Primärschlüssel gehörte, wurden die alten Datensätze zudem nicht überschrieben, sondern neue eingefügt.
    Ich habe dann halt explizite Formatdefinitionen "DDMMYYYY" in die Masken (letzte Änderung des Quelltextes: August 1995) eingebaut ...

    1. Hallo Michael,

      ("$jahr += 1900;" in Perl direkt nach $localtime() und nirgendwo mehr String-Concat mit Datumswerten ist eines. ;-)

      so oder ähnlich würde ich das auch in selbsterstellen neuen Scripten machen, aber für die "Konfektions-Scripte" reicht meine Anregung eigentlich aus, denke ich mal...

      sag mal, hast du 'ne Standleitung, bist du immer online :-)

      Gruß und daß wir noch viele schöne Dinge zum Ändern entdecke, sonst wird es zu langweilig...

      wo doch in meiner Firma (Software) fast alle Anrufe  der Kunden keine Bugs meldeten, sondern
      nur mitteilten, daß alles in Ordnung läuft....

      da ist so ein kleines skurriles Script doch richtig eine Erholung!

      Gruß
      Connie

      1. sag mal, hast du 'ne Standleitung,

        Jein. ;-)

        bist du immer online :-)

        Inzwischen haben die wichtigen Börsen alle zu.
        Heute war der erste Handelstag nach dem Datumswechsel - dessen Daten verarbeitet meine Kiste heute Nacht weiter. Ab 3 Uhr fallen die cron-gesteuerten Abholungsprozesse über sie her, um sich die Ergebnisse zu krallen - vorher komme ich nicht aus dem Büro weg. (Hoffentlich wenigstens direkt danach ...)
        Und irgendwas muß ich ja machen bis dahin: Testen kann ich nichts mehr, weil auf dem Server schon die nächtliche Bandsicherung läuft, und da muß die Datenbank unten sein ... gähn ... immerhin beginnt in drei Minuten der "Vorverdauer" seine Arbeit ...

        wo doch in meiner Firma (Software) fast alle Anrufe der Kunden keine Bugs meldeten, sondern
        nur mitteilten, daß alles in Ordnung läuft....

        Die Börsen in Großbritannien, Japan und der Schweiz hatten heute zu - erst im Verlauf der Woche werden wir wissen, ob wirklich alles perfekt funzt.

        1. Hallo Michael,

          ich hoffe, du hattest eine erfolgreiche Nacht-Schicht!

          Connie

          1. ich hoffe, du hattest eine erfolgreiche Nacht-Schicht!

            <gähn>Als um 2:15 Uhr die Steuerung versuchte, das Tagespaket für den 30. Dezember 2099 zu packen (und danach alle vorhergehenden), da wurde mir leicht unwohl ... aber so gegen 4:45 Uhr, als ich mich auf den Heimweg machte, sah die Welt schon wieder rosarot aus.</gähn>

            1. Michael,

              <gähn>Als um 2:15 Uhr die Steuerung versuchte, das Tagespaket für den 30. Dezember 2099 zu packen (und danach alle vorhergehenden), da wurde mir leicht unwohl ... aber so gegen 4:45 Uhr, als ich mich auf den Heimweg machte, sah die Welt schon wieder rosarot aus.</gähn>

              klingt ja, als hätte es annähernd geklappt....
              und solche Morgenspaziergänge haben was ganz Besonderes....

              früher habe ich mich oft, wenn ich um die Zeit aus der Kneipe fiel, über den Gegenverkehr gewundert... da wußte ich als privilegierte Studentin noch nichts vom Arbeitsalltag....

              ruh dich gut aus!

              Connie

              1. klingt ja, als hätte es annähernd geklappt....

                Hat es. :-)))

                Jetzt kann ich mich wieder mit dem ganz normalen Wahnsinn beschäftigen - beispielsweise mit diesen Börsenkursen vom 10. Februar 2036, die heute früh in meine Datenbank eingepflegt wurden, gnlpfts ...

                und solche Morgenspaziergänge haben was ganz Besonderes....

                Eben - das Gefühl von Freiheit und Abenteuer ... (nein, nein, ich bin Nichtraucher)

                früher habe ich mich oft, wenn ich um die Zeit aus der Kneipe fiel, über den Gegenverkehr gewundert... da wußte ich als privilegierte Studentin noch nichts vom Arbeitsalltag....

                Als Nachtmensch ist es mir sogar recht, wenn endlich Ruhe einkehrt im Büro.

                ruh dich gut aus!

                ... und vorhin war der Techniker da, der die gestorbene root-Platte meines Intranet-Servers gewechselt hat. Sicherheitshalber hat er die anderen Platten auch gleich noch getestet, und siehe da ... naja, die andere Platte muß erst wieder in Amsterdam bestellt werden ...

                <cite class="Kollege">
                      "Isn't life wonderful? Yes, it isn't ..."
                </cite>

      2. Hallo Connie!

        ("$jahr += 1900;" in Perl direkt nach $localtime() und nirgendwo mehr String-Concat mit Datumswerten ist eines. ;-)

        so oder ähnlich würde ich das auch in selbsterstellen neuen Scripten machen, aber für die "Konfektions-Scripte" reicht meine Anregung eigentlich aus, denke ich mal...

        http://www.teamone.de/selfaktuell/self_forum/49048.html

        Na dann hatte ich Glück, dass die auf Atomic Eggs eingesetzte Perl-Scripte von "Experten" dieses Fachs geprüft wurden: das AE-Gästbuch (nuschelweich) wurde von Frank Schönmann geschrieben, das Forums-Skript ist zwar von Matt Wright (gibt's bei Communitech im Paket), doch gerade die Datumsausgabe gefiel mir damals nicht und da hatten Calocybe und Andreas B., damals in FFM zu Besuch, sich der Sache angenommen. "$year+= 1900;" habe ich danach überall eingesetzt, auch im FormMail-Skript das ebenfalls beim Provider dabei ist. Null Poblemo (= das könnte ich sogar mit PALF unterschreiben!).

        Bis danndann
        PALF

  2. Danke, hab's gleich mal eingebaut!

    MfG Simon

    PS: Lustiges Bild...

  3. $sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

    danach ist die $year bekannt und hat zur Zeit den Wert "100"

    wenn Ihr danach folgendes einbaut:

    if ($year > 99) {$year = substr($year,1,2);}

    [...]

    Warum so kompliziert und nicht wie folgt?

    $year += 1900;

    cu,
    Peter