[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


--
-----------------------
Mach es möglichst simpel und mach es richtig,
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.
-----------------------
Mach es möglichst simpel und mach es richtig,
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 !