[geklärt] Verwendung von Time::Piece unter Perl 5.28

Begonnen von TomLee, 05 März 2023, 10:47:31

Vorheriges Thema - Nächstes Thema

TomLee

Hi,

kann da wer bitte ein zwei Worte zu meinen zwei Fragezeichen sagen :

Zitat von: TomLee am 04 März 2023, 17:35:44

edit:

ohne Verwendung von localtime und time_str2num, direkt ein Time::Piece Objekt machen.
Warum man das use Time::Piece nicht braucht und vorallem das use Time::Piece erst mit Perl 5.8 vorhanden sein soll (bei mir ist 5.28 installiert), ist mir unklar.


my $t = Time::Piece->strptime('2023-03-03T14:01:38+00:00','%Y-%m-%dT%T%Z');
return $t->dmy('.').' '.$t->hms;


Thomas

betateilchen

#1

  • "erst mit Perl 5.8" ist etwas anderes als "bereits seit perl 5.8". Und seit 5.8 ist Time::Piece im Core enthalten, deshalb muss man es nicht explizit angeben.
  • 5.28 ist neuer als 5.8, weil 28 größer ist als 8


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Zitat5.28 ist neuer als 5.8, weil 28 größer ist als 8

Das war mir nicht klar  ::) ;D

Jetzt schon, nachdem ich darauf gestossen wurde und mir mal dann den Versionsverlauf auch mal angeschaut habe, bspw. hier

Danke

TomLee

Ich würde gerne prüfen was localtime->week am 01.01.24 ausgibt, einfach aus Interesse.

Was mach ich falsch, wie mach ich es richtig ?

sub testyweek{
my $ti = "Mon Jan 15 11:13:03 2024";
return $ti->week;
}
ergibt
Can't locate object method "week" via package "Mon Jan 15 11:13:03 2024" (perhaps you forgot to load "Mon Jan 15 11:13:03 2024"?) at ./FHEM/99_Calendar_Utils.pm line 17.

betateilchen

Dein $ti ist halt nur ein simpler string und kein object.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

#5
Ok, danke.
Versteh ich jetzt nach nochmal genauer lesen so, das man das zuvor irgendwie "parsen" muss, mit dem Beispiel aus der Doku geht es also so:
sub tweek{

my $ti = Time::Piece->strptime("Monday 1 Jan, 2024",
                              "%A %d %b, %Y");
#my $ti = "Mon Jan 15 11:13:03 2024";
return $ti->week;
}

TomLee

Ist die default Sprache (locale) die strptime nutzt Englisch ? Und nicht die, die im System eingestellt ist ?

Eingestellt hab ich nämlich Deutsch:
Zitatpi@FHEMPIOS:~ $ localectl status
   System Locale: LANG=de_DE.UTF-8
                  LANGUAGE=de_DE
       VC Keymap: n/a
      X11 Layout: gb
       X11 Model: pc105

Wenn ich Montag verwende bekomme ich das zurück:
ZitatError parsing time at /usr/lib/arm-linux-gnueabihf/perl/5.28/Time/Piece.pm line 583.

TomLee

#7
Was ich ursprünglich prüfen wollte hat sich bestätigt. Bspw. wird am 29.12.2025 der falsche Wert zurückgegeben.

herrmannj


TomLee

#9
Am 29.12.2025 ist KW 1 und nicht 52, oder ?

Alles gut, es liegt an mir und hab mich vertan !

TomLee

Hallo,

hat hier bitte einer eine Erklärung für mich warum nach jedem shutdown restart das Objekt week nicht lokalisiert werden kann ?

Es handelt sich um ein userReadings:

cweek:triggered {cweek()}
das eigentlich funzt, bis zu dem restart, danach kommt die Meldung

Error evaluating cal_Abfallkalender userReading cweek: Can't locate object method "week" via package "Thu Oct  5 19:06:49 2023" (perhaps you forgot to load "Thu Oct  5 19:06:49 2023"?) at ./FHEM/99_Calendar_Utils.pm line 12.
in dem Reading.

Wenn ich dann einfach nur die Funktion umbennene, klappt das wieder bis zu einem Neustart.

sub cweek {
return localtime->week;
}

TomLee

Es wär nett wenn jemand dazu was sagt bzw. Hinweise gibt was ich noch liefern kann das ich die Ursache dafür finde, meine Pi starte ich zwar selten neu, es wär aber lästig jedes mal die Meldung dann auf meinem Wandtablet zu sehen wo ich auf der Screensaver-Seite die Kalenderwoche anzeige.

TomLee

#12
Etwas weiter bin ich, die Funktion muss gar nicht umbenannt werden, es reicht wenn ich die myUtils (hier 99_Calendar_Utils.pm) einfach nur aufrufe und direkt so wie sie ist speichere, dann ist die Objektmethode auf einmal vorhanden.
Wenn ich jetzt oben in der 99_Calendar_Utils.pm ein use Time::Piece; vornehme und einen restart mache, ist die Objektmethode gleich vorhanden.

Was ich jetzt gerne verstehen würde ist, was jetzt der Unterschied ist zwischen dem laden der myUtils beim Start von FHEM und dem "einfach nochmal speichern" während FHEM läuft, wenn ich use Time::Piece; oben weglasse ?