• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

perl zeitrechnung

lampe

New member
Hallo zusammen

Ich komm nicht weiter.
Folgendes:
Ich habe ein textfile welches ein Datum im Format mm/dd/yy enthält.
Ich habe eine RegEx geschrieben, damit ich die mm in $1, die dd in $2 und die yy in $3, sowie die exakte Zeit in hh $4, min $5 und sec in $6 habe.

Nun weiss ich aber nicht wie ich das anstellen soll, ich soll überprüfen ob das Datum älter als 10 Tage ist.

PHP:
my $actual_date = time();
--> Zeit in sek. von 1970

Leider weiss ich nun nicht wie ich das Datum in den Variablen in eine solche Zeit umwandeln kann...

Kann mir jemand helfen?

Grüsse
 
Sowas hört sich nach einer typischen Aufgabe an, die sich leicht mit einer Datenbank lösen läßt. Nur mal so als Hinweis, weil ich auch lange mit Textfiles rumgemurkst habe.


Ich nutze für diese Aufgabe POSIX weil es sowieso meistens eingebunden ist. POSIX::mktime wandelt das Datum in einen Timestamp um (Achtung! mktime erwartet als Jahr, die Anzahl der Jahre seit 1900)

P.S. und um die Zeichnekette umzuwandeln, ist split vielleicht effektiver.
 
Danke für deinen Hinweis. Aber in diesem Skript geht es nur darum zu sehen, ob ein Backup des Servers ins TSM geschrieben wurde, also in den letzten zehn Tagen.

Ich habs nun so:

PHP:
use CGI qw(:standard);
use strict;
use POSIX;

my $actual_date = time();
#print $actual_date;


my @servernames = `grep -vw s00280 /allnodes | grep ^s`;
#my @dsmc = `sudo dsmc q ba "/mksysb/" -inactive`
my @dsmc = `cat /tmp/lulu.txt`;

foreach my $output(@dsmc){
        #print "LINE $output";
        if ($output =~ /\s+[0-9\,]+\s+[A-Z]+\s+(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)\s+\w+[0-9]+\s+[A-Z]+\s+([\/]+\w+[\/]+\w+)/){
                open (FILE, ">>backup_def.txt");
                print FILE $output;
                close FILE;
                my $month_server = $1;
                my $day_server = $2;
                my $year_server = $3;
                my $hours_server = $4;
                my $minutes_server = $5;
                my $seconds_server = $6;
                my $path_server = $7;
                my $server_date = POSIX::mktime( $seconds_server,$minutes_server,$hours_server,$day_server,$month_server,$year_server );
                print $server_date;
        }
}

Es gibt mir KEINE Fehlermeldung, zeigt mir aber auch nicht die Sekunden an. Es gibt einfach nichts aus....
 
Da ist dir schwer zu helfen. Bist du sicher, dass der reguläre Ausdruck etwas sinnvolles ergibt? Du hast meinen Hinweis nicht gelesen? Ganz allgemein würde ich an deiner Stelle auch die Werte kontrollieren. Du kannst da schon 'ne Menge Fehler verhindern, wenn du auch den -w schalter benutzt.
PHP:
#!/usr/bin/perl -w
 
Doch habe ich gelesen. Wollte auch nur mal schauen ob die Funktion geht.
Die Werte stimmen, ich habe jeden einzelnen Wert ausgeben lassen bei meinem Testing. Du siehst ja wo bei der RegEx die ()-Klammern sind. diese sind jeweils die $1 - $x
Ich schalte das mal ein...
 
PHP:
my $server_date = POSIX::mktime( $seconds_server,$minutes_server,$hours_server,$day_server,$month_server,$year_server-1900 );

du meinst so in etwa?
mit dem #!/usr/bin/perl -w

erhalte ich nun ein Warning.. mit dem kann ich schon mehr anfangen :)
 
Dann musst du es umrechnen. Je nach dem ist vor 2000 oder danach. Vor 2000 musst du gar nichts machen, für Daten danach musst du 100 addieren.
 
danke für die Hilfe.

Habs hinbekommen:

PHP:
my $server_date = POSIX::mktime( 7, 9, 8,$2, $1-1, $3+100,0,0,-1 );
print "$1 $2 $3 " . POSIX::strftime("%d-%m-%Y %H:%M:%S", localtime($server_date)). " $output\n";
 
Zurück
Oben