Variable $month mit falschem Inhalt

Begonnen von Panik, 16 Oktober 2013, 22:07:01

Vorheriges Thema - Nächstes Thema

Panik

Hallo,

in einem Teil meines Scriptes verwende ich den Ausdruck
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(time);

Merkwürdigerweise hat die Variable $month anschließend den Wert "9" - jetzt im Oktober!
Ich wüßte nicht, woher das rührt, da sonst alle Zeitangaben auch in Logs korrekt sind.
Hat jemand Ideen?
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

fiedel

Idee: Die Wertereihe beginnt bei Null (Januar)

...keine Panik!!! ;o)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

PeMue

hm, bei mir kommt mit
{$month} in der fhem Konsole der Wert
10

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

betateilchen

ja, in Deinem Fall ist $month ja auch eine Variable, die aus fhem kommt und nicht aus einer perl-Zuweisung wie beim Fragesteller, der aus localtime() die Einzelkomponenten generiert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

PeMue

ok verstanden. Aber woher weiß dann die entsprechende Funktion, welche $month jetzt gerade gültig ist (globale vs. lokale Variablen)? Oder Panik muss alle seine Werte mit +1 versehen, damit es wieder allgemein "verständlich" ist ...

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

betateilchen

Eine lokale Variable ist nur innerhalb der Funktion existent, in der sie definiert wurde.

Und die globalen fhem-Variablen wie $month oder $we stehen z.B. in der 99_myUtils überhaupt nicht zur Verfügung, weil die nicht dorthin vererbt werden. Wenn Du die in der 99_myUtils nutzen willst, musst Du sie direkt im Funktionsaufruf als Parameter (z.B. aus einem notify) mit übergeben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Panik

Hallo,

Danke für die Antworten!

Es ist tatsächlich so, daß gerade bei Monat von 0-11 gezählt wird. Es muss 1 addiert werden, um zum richtigen Monat zu kommen.

Unter http://sysadminscorner.uherbst.de/perl/date.html ist das ganz gut erklärt und eine recht nützliche Subroutine
für Datumsbehandlungen in Perl angegeben, die auch Merkwürdiges bei der Jahreszahl behebt.
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW