Zeitraumberechnung

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von topvbal, 10.08.2006.

  1. #1 topvbal, 10.08.2006
    topvbal

    topvbal Grünschnabel

    Dabei seit:
    10.08.2006
    Beiträge:
    5
    Zustimmungen:
    0
    Guten morgen

    Ich hab folgendes Prob:

    ich möchte den Zeitraum zwische dem heutigen Dtaum und einem vergangenen Datum in Tagen berechnen. Wie kann ich das realisieren. Ein Anforderung is, dass es in der Korn-Shell funzen muss. Ich hatte auch schon an eine Lösung mit Perl gedacht. Hier mal der Anfang
    Code:
    perl -MPOSIX -e 'print strftime("%y%m%d%H%M",localtime(time()-[COLOR="Red"]vergangenes_Datum[/COLOR]))'
    Wie kann ich jetzt ein älteres Datum in diese Berechnung einfügen?

    Schon mal vielen Danke im Voraus.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wahrscheinlich gibts 'ne bessere Lösung, aber ich realisier dies bei mir grob wie folgt:

    Code:
    echo "1.12.1999" | perl -nal -F'\.' -e '@t=localtime(time()); print (((1900+$t[5]-$F[2])*12+$t[4]-$F[1])*30+$t[3]-$F[0])'
    
    Gruss, Xanti
     
  4. #3 topvbal, 10.08.2006
    topvbal

    topvbal Grünschnabel

    Dabei seit:
    10.08.2006
    Beiträge:
    5
    Zustimmungen:
    0
    kannst du mir die Zeile vllt mal nen bisel erläutern?
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Da Du selber ein Perl-Beispiel gebracht hast, nehme ich an, dass Du etwas Erfahrung mit Perl hast.

    Kurze Erläuterung zu den Params:

    -n Legt Schleife um Stdin
    -a aktiviert den Autosplit von Stdin
    -F '\.' sagt, wo gesplittet werden soll, sprich 1.12.1999 wird an den Punkten gesplittet und ein Array @F mit $F[0]=1, $F[0]=12... wird bereitgestellt.

    Mehr dazu in "perldoc perlrun".

    Der Rest ist selbsterklärend. localtime() liefert ebenfalls ein Array (Sekunde, Minute,...), wobei beachtet werden muss, dass das Jahr noch um 1900 inkrementiert werden muss (perldoc -f localtime).

    Gruss, Xanti
     
  6. #5 Wolfgang, 10.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Wenn es schon Perl sein darf, dann empfehle ich dafür das Modul Date::Calc
    Auf Cpan erhältlich.
    Code:
    $ perl -mDate::Calc=Delta_Days -le '$Dd=Delta_Days(2005,06,01,2006,06,01);print $Dd'
    365
    
    Das gibt beispielsweise die Anzahl der Tage zwischen dem 1.Juni 2005 und dem 1.Juni 2006 aus.
    Siehe http://www.oreilly.de/catalog/perlmodger/manpage/calc.htm#Delta_Days
    oder perldoc Date::Calc

    Gruß Wolfgang
    PS welches date verwendest du?
    GNU Date kennt den Formatstring %s, was die Sekunden (Unix-Timestamp) ausgibt.
    Damit könntest du auch rechnen und anschließend umrechnen Diff/24*3600.
     
Thema:

Zeitraumberechnung