xplayer2005
Goto Top

Perl - mit Datum rechnen und Ordner selektieren

Hallo,

ich lese das Datum aus dem Ordnernamen ein, jetzt soll geprüft werden ob das eingelesene Datum älter als 5 tage ist..

wie mache ich das?


mein Problem ist das ich nicht weis wie ich in Perl mit dem Datum rechne..


für Ideen bedanke ich mich vorab

Content-Key: 44390

Url: https://administrator.de/contentid/44390

Printed on: April 24, 2024 at 07:04 o'clock

Mitglied: 6890
6890 Nov 14, 2006 at 11:52:42 (UTC)
Goto Top
hi,

also einfachste methode ist die:
snippet
# in dieser var stehen die sekunden seit 01.01.1970
my $time=time();

# hier stehen die 5 tage in sekunden (86400 hat der tag * 5 tage)
my $alter = 86400 * 5;

# hier steh das maximale alter wie alt dateien sein dürfen (jetzt - 5 tage)
my $maxAlter = $time - $alter;
snippet end

ansonsten gibt es noch das modul Date::Calc. mit dem kannst du auch datumsberechnungen machen.

http://search.cpan.org/~stbey/Date-Calc-5.4/Calc.pod

mfg godlike P
Member: todason
todason Nov 14, 2006 at 11:53:38 (UTC)
Goto Top
Hallo,
anhand dieses Beispiels kannst du erkennen wie Perl das Datum verarbeitet:
sub timestamp {

(my $sec,my $min,my $hour,my $mday,my $mon,my $year) = localtime(time); #Systemzeit auslesen
$year += 1900; #Jahr zählt von 1970
$mon +=1; #Monat 0-11
my $stamp = sprintf("%02d:%02d:%02d-%02d.%02d.%04d",$hour,$min,$sec,$mday,$mon,$year);

return $stamp;
}

Gruss
Todason
Member: xplayer2005
xplayer2005 Nov 14, 2006 at 14:24:00 (UTC)
Goto Top
Member: xplayer2005
xplayer2005 Nov 14, 2006 at 14:25:47 (UTC)
Goto Top
ja und wie mach ich aus meinem eingelesenem Datum - 29.10.2006 - so eine Sekunden Zahl damit ich die beiden vergleichen kann??

das war mein eigentliches Problem
Member: xplayer2005
xplayer2005 Nov 14, 2006 at 14:36:38 (UTC)
Goto Top
zur verdeutlichung. is vielleicht auch einfacher so...

wenn ich ne datei mit -M "Datei"; aufrufe bekomm ich ja das alter dieser in Tagen zurück.

was ich jetz gerne berechnen würd ist wie "alt" z.B. ein Ordner ist der 12.10.2006 heist bzw. aus dem ich 12.10.2006 ausgelesen hab.

ich stell mir das so vor das ich irgentwie den Ausdruck "12.10.2006" in Sekunden umgerechnet bekomm (denke einfach rechenen wird ned gehn wegen den schaltjahren...)
dann von dem heutigen Datum/Sekundenzahl abziehe und dann entsprechend ein Ergebniss bekomme, in Tagen oder Sekunden is dann egal.. und zu guter letzt vergleiche ob der Ordner/das eingelesene Datum jetzt älter is als 5 Tage oder nicht...


Danke.
Member: xplayer2005
xplayer2005 Nov 14, 2006 at 14:36:40 (UTC)
Goto Top
zur verdeutlichung. is vielleicht auch einfacher so...

wenn ich ne datei mit -M "Datei"; aufrufe bekomm ich ja das alter dieser in Tagen zurück.

was ich jetz gerne berechnen würd ist wie "alt" z.B. ein Ordner ist der 12.10.2006 heist bzw. aus dem ich 12.10.2006 ausgelesen hab.

ich stell mir das so vor das ich irgentwie den Ausdruck "12.10.2006" in Sekunden umgerechnet bekomm (denke einfach rechenen wird ned gehn wegen den schaltjahren...)
dann von dem heutigen Datum/Sekundenzahl abziehe und dann entsprechend ein Ergebniss bekomme, in Tagen oder Sekunden is dann egal.. und zu guter letzt vergleiche ob der Ordner/das eingelesene Datum jetzt älter is als 5 Tage oder nicht...


Danke.
Mitglied: 6890
6890 Nov 15, 2006 at 14:05:22 (UTC)
Goto Top
mit
my $alterInSekunden = (stat(datei oder ordner))[9];
bekommst du das alter seit der letzten änderung in sekunden zurückgegeben...

mfg
Member: xplayer2005
xplayer2005 Nov 16, 2006 at 11:54:15 (UTC)
Goto Top
ne das war nicht mein Problem.

ich will ja nicht das alter der Letzten Änderung sondern das eingelesende datum in sekunden umwandeln

--habs aber mitlerweile selbst rausbekommen:

---
use Time::Local;

timelocal(0,0,0,$extDay,$extMon-1,$extYear) #liefert das alter in secunden
--

die ersten drei werte sind secunde,Minute,Stunde, da ich die nciht einlese setze ich die auf 0

die nächsten drei sind die eingelesenen Variablen extrahierterTag, extrahierterMonat (in Perl wie immer -1 nicht vergessen), extrahiertesJahr


Trozdem danke für die zahlreichen Antworten