|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Datum in Sekunden umwandeln
|
Seitenanfang |
| Hallo Ich habe folgendes Problem. Ich möchte ein Datum in Zeit seit 1970 umwandeln, bekomme aber immer eine Fehlermeldung: use Time::Local; # in $datum steht zB 09.07.2005($mytag, $buf1, $monat, $buf2, $jahr) = unpack("A2A1A2A1A2",$datum); $jahr = $jahr+2000; $time=timelocal(0,0,0,mytag,$monat,$jahr);
Ich bekomme immer den Fehler: Day '' out of range 1..31 at line 84
Datum: 21.08.2006-13:33

|
re: Datum in Sekunden umwandeln
|
Seitenanfang |
warum bitte machst du das:
$jahr = $jahr+2000; erstens musst du für die umrechnung was abziehen, und zweitens 1900 und nicht 2000.($mytag, $buf1, $monat, $buf2, $jahr) = unpack("A2A1A2A1A2",$datum); würde ich kürzer machen:
my ($mytag1,$monat, $jahr) = split /\./, $datum; und wenn du den fehler Day '' out of range 1..31 at line 84 bekommst, bedeutet das, dass in $datum nicht drinsteht, was du denkst, denn sonst würde in timelocal nicht der leerstring '' ankommen.außerdem: du solltest unbedingt strict und warnings benutzen. warum, steht im wiki von perl-community.de: http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict
Datum: 21.08.2006-14:39

|
re: Datum in Sekunden umwandeln
|
Seitenanfang |
>warum bitte machst du das: >$jahr = $jahr+2000; >erstens musst du für die umrechnung >was abziehen, und zweitens 1900 und >nicht 2000.Sorry, es steht doch 16.09.05 drin und dann muss ich 200 addieren. >würde ich kürzer machen: >my ($mytag1,$monat, $jahr) = split / \./, $datum; Hatte ich auch schon probiert, gibt den selben Fehler >Day '' out of range 1..31 at line 84 >bekommst, bedeutet das, dass in >$datum nicht drinsteht, was du >denkst, denn sonst würde in >timelocal nicht der leerstring '' >ankommen. Das ist ja das Seltsame! Ich kann $datum und auch $mytag etc. ausgeben und dann stehen die Werte drin. Also verstehe ich nicht, warum sich timelocal beschwert. Selstsam...
Datum: 21.08.2006-14:49

|
re: Datum in Sekunden umwandeln
|
Seitenanfang |
Ich habe den Fehler gefunden! Danke für die Hilfe
Datum: 21.08.2006-15:25

|
re: Datum in Sekunden umwandeln
|
Seitenanfang |
kannst du dir vorstellen, dass es vielleicht auch noch andere interessieren könnte? das hier ist kein helpdesk, dafür ist es kostenlos. schreib halt wenigstens, worans gelegen hat, damit der nächste, der danach sucht, weiß, was er tun muss. wenn es niemanden interessieren würde, klnnten wir den thread auch wieder ganz löschen, aber das ist nicht der sinn eines forums.
Datum: 21.08.2006-15:38

|
re: Datum in Sekunden umwandeln
|
Seitenanfang |
| Es lag daran, dass in $Datum kein Wert drin stand, obwohl ich dachte, es wäre einer drin. Meine Debug-Ausgaben waren falsch.
Datum: 21.08.2006-15:56

|
re: Datum in Sekunden umwandeln
|
Seitenanfang |
was gedenkst du jetzt zu tun? oder was vermutest du, woran es liegt? wenn du nicht mit mehr details rausrückt, kann dir hier auch niemand helfen. du denkst, perl oder das modul hat hier einen bug? dann erzeuge das kleinstmögliche script, das den fehler reproduziert. das gilt übrigens auch fürs forum. mit "in der variable soundso steht in etwa dasunddas drin" kann man halt nicht soviel anfangen wie "das ist der code: ..., so rufe ich ihn auf, und das kommt raus: ..."wegen "Hatte ich auch schon probiert, gibt den selben Fehler": es war dazu gedacht, deinen code kürzer zu machen. der fehler liegt wohl eh woanders. ich zeig dir jetzt mal was:
$ perl -wle' use Time::Local; my $datum="31.07.05"; my ($mytag,$monat, $jahr) = split /\./, $datum;$time=timelocal(0,0,0,$mytag,$monat,$jahr); print scalar localtime $time' Wed Aug 31 00:00:00 2005 $ perl -v This is perl, v5.8.7 built for x86_64-linux-gnu-thread-multi so muss das aussehen.
Datum: 21.08.2006-15:36

|
re: Datum in Sekunden umwandeln
|
Seitenanfang |
| Entschuldige, wenn ich mich ungebührlich verhalten habe. Du hast natürlich Recht! Es ist nur so schwer zu erklären, woran es lag, der Code an sich ist ok. Das Problem lag daran, dass ich eine Datei eingelesen habe und in der ersten Zeile nur Müll drin stand, und das konnte timelocal dann nicht verarbeiten. Wenn ich timelocal auskommentiert habe, dann hat er die zeile weggeworfen (in einem spteren schritt) und es bei der nächsten zeile richtig gemacht, d.h. es stand was vernünftiges in $datum drin. Ich prüfe also jetzt zuerst die Zeilen ab, und rufe dann timelocal auf. Dann geht es. Ich dachte halt, dass der Abdruck des ganzen Skipts den Rahmen sprengen würde. (Ich muss mich halt dran gewöhnen, ohne Debugger zu arbeiten.) Danke für die Hilfe!
Datum: 21.08.2006-15:55

|
|

|

|

|
 |

|

|
|