Robert Allerstorfer: Wochentag eines beliebigen Datums

Hallo,

gibt es eine EINFACHE Möglichkeit, den Wochentag eines beliebigen Datums in Perl zu bestimmen?

$seconds = time();

liefert mir die Sekunden seit 01.01.1970 (in SelfHTML übrigens irrtümlicherweise Milli-Sekunden angegeben!) der AKTUELLEN Zeit, aus der mittels

@timeparts = localtime($seconds);

einfach der zugehörige Wochentag ermittelt werden kann. Wie bekomme ich aber die Sekunden seit 01.01.1970, die bis zu einem beliebigen Datum verstrichen sind, ohne mühsam herumzurechnen?

danke für vorschläge,

robert

  1. Hallo Robert,

    Wie bekomme ich aber die Sekunden seit 01.01.1970, die bis zu einem beliebigen Datum verstrichen sind, ohne mühsam herumzurechnen?

    Also time() und seine Nachbarn wie localtime() lassen sich in Perl meines Wissens immer nur fuer den aktuellen Zeitpunkt aufrufen - man korrigiere mich, wenn das nicht stimmt, wuerde mich naemlich durchaus auch interessieren. Das hiesse naemlich wirklich, solche Sachen wie "sag mir den Wochentag vom 2.10.1991" haendisch anhand eines Bezugsdatums und der ueblichen Datumsakrobatik programmieren zu muessen. Es gibt zwar diverse Perl-Module zur Zeitberechnung (vgl. http://reference.perl.com/query.cgi?time), aber so einfach wie in JavaScript (einfach der Zeitfunktion ein Datum uebergeben und anschliessens Datumsvariable.getDay() aufrufen) scheint es in Perl nicht zu sein...

    viele Gruesse
      Stefan Muenz

    1. hi!

      Wie bekomme ich aber die Sekunden seit 01.01.1970, die bis zu einem beliebigen Datum
      verstrichen sind, ohne mühsam herumzurechnen?
      Also time() und seine Nachbarn wie localtime() lassen sich in Perl meines Wissens immer
      nur fuer den aktuellen Zeitpunkt aufrufen.

      Irrtum. time liefert die aktuelle Zeit in Sekunden seit 1970. localtime und gmtime wandeln eine in Sekunden seit 1970 angegebene Zeit in ein lesbares Format oder eine Liste mit Datums-/Zeitwerten um. Werden localtime oder gmtime jedoch ohne Paramter aufgerufen, rufen sie ihrerseits time auf, um die aktuelle Zeit zu erhalten.

      Man muss localtime also nur die Sekundenzahl eines bestimmten Datums übergeben und erhält in der zurückgelieferten Liste auch den Wochentag. Um allerdings die Sekunden aus einem normalen Datum zu erhalten, braucht man die Funktion timelocal aus dem Modul Time::Local.

      Folgendes sollte funktionieren:
      === cut ===
      use Time::Local;
      $TIME = timelocal($sekunde, $minute, $stunde, $tag, $monat, $jahr);
      ($tmp, $tmp, $tmp, $tmp, $tmp, $tmp, $wochentag) = localtime $TIME;
      === cut ===

      Zu beachten ist, dass timelocal erwartet, dass vom Jahr 1900 abgezogen wurde, vom Monat 1. Der 6. April 1980 wäre also $tag = 6, $monat = 3, $jahr = 80.

      bye, Frank!

      1. use Time::Local;
        $TIME = timelocal($sekunde, $minute, $stunde, $tag, $monat, $jahr);

        bye, Frank!

        Danke, funktioniert! Das mit dem Local-Modul hätte ich früher wissen sollen - habe ich doch mittlerweile die Berechnung der Sekunden seit 01.01.1970 eines beliebigen Datums selbst programmiert...

        lg,
        robert

        PS: was noch interessant wäre, aber hier eigentlich ot ist, nach welchen regeln die aktuelle kalenderwoche zugeteilt wird. Ich habe nämlich keine regel erkennen können - heuer hat zB. das Jahr mit der 53. (!) Woche begonnen.

        1. Hi,

          PS: was noch interessant wäre, aber hier eigentlich ot ist, nach welchen regeln die aktuelle kalenderwoche zugeteilt wird. Ich habe nämlich keine regel erkennen können - heuer hat zB. das Jahr mit der 53. (!) Woche begonnen.

          ich bin nicht sicher, aber ich glaube die erste Woche hängt davon ab, wo der Mittwoch liegt. In diesem Fall war der Mittwoch im Jahr 98, also 53. Woche. Wäre der Mittwoch in diesem Jahr gewesen, wäre der Dienstag (31.12.98) bereits die erste Woche 99 gewesen.

          Ist aber ohne Gewähr...

          Cheatah

      2. Hallo Frank,

        danke fuer die Aufklaerung!

        viele Gruesse
          Stefan Muenz