Hallo zusammen,
ich habe ein kleines Problem bei der Formatierung eines Wertes als Userreading
Mein Reading liefert ein Zeitstempel im folgenden Format:
timestamp: 2023-03-03T14:01:38+00:00
Ich hätte gerne so ein Format "14:01:38 03.03.2023". Den ersten Teil für das Datum habe ich schon, jetzt bekomme ich aber die Uhrzeit nicht hin:
LadenEnde {join("." => reverse split('-', (split(' ',ReadingsTimestamp("Auto","timestamp",0)))[0]))}
Hat jemand das so irgendwo im Einsatz?
VG
Alex
Hallo Alex,
mein Test
{my $val='timestamp: 2023-03-03T14:01:38+00:00';; $val=~m/T(.*)\+/;;return $1}
Gruß Otto
Hallo Otto,
vielen Dank für deine Mühe. Ich habe einen Logikfehler. Ich meinte nicht das Datum des Readings, sondern den Wert des Readings. Da möchte ich das Datum formatiert haben. Ist aber vermutlich nicht so wichtig.
Ich habe das mal so gemacht. Jetzt kommt das raus:
LadenEnde2: 17:51:12.867778
Das Userreading ist so definiert:
LadenEnde2 {my $val=ReadingsVal("BMW","fuel_and_battery_charging_end_time",0);; $val=~m/T(.*)\+/;;return $1}
Der ursprüngliche Readingswert sieht so aus:
2023-03-03 15:49:15 fuel_and_battery_charging_end_time 2023-03-03T17:51:12.867778+00:00
Also, es sieht besser aus, aber die Zeit "17:51:12.867778" ist noch nicht so schön. Das Datum wäre auch noch super.
Danke dir schon mal!!!
Grüße
Alex
Passt das?
{my $val='2023-03-03T14:01:38+12:34';; $val=~m/(.*)T(.*)\+/;;return join("." => reverse split('-',$1))." ".$2}
Bei mir kommt raus:
03.03.2023 14:01:38
Hallo JHohmann
nocht nicht ganz: Siehe oben - ich habe das Readingsdatum versehentlich geschrieben. Gemeint war aber den Value des Readings.
Damit wäre $var= "2023-03-03T17:51:12.867778+00:00".
Sorry.
Das kommt bei deinem Userreadings raus:
03.03.2023 17:51:34.667388
Schön wäre so was "17:51:34 03.03.2023". Danke für eure Unterstützung.
Gruß
Alex
my $val = '2023-03-03T17:51:12.867778+00:00';
$val =~ /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/;
return "$3.$2.$1 $4:$5:$6";
Zitat von: xasher am 03 März 2023, 16:20:18
Schön wäre so was "17:51:34 03.03.2023".
Dann musst Du halt die letzte Zeile anpassen:
return "$4:$5:$6 $3.$2.$1";
--
Hallo betateilchen, hallo alle,
super, damit komme ich klar. Das funktioniert so!!!
Besten Dank
Alex
Noch eine Möglichkeit:
Zitat{use Time::Piece;
my $t = localtime(time_str2num("2023-03-03T14:01:38+00:00"));
return $t->dmy('.').' '. $t->hms;}
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;