perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




11.02.2012 / 07:05

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDatum 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

Beitragre: 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

Beitragre: 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

Beitragre: Datum in Sekunden umwandeln
Seitenanfang
Ich habe den Fehler gefunden!
Danke für die Hilfe

Datum: 21.08.2006-15:25

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

-






-
-