Von Holger Voges auf Samstag, 03. Februar 2024
Kategorie: Tipp

Aus einer Liste von Datumswerten jeweils x Sekunden überspringen

Um aus einer Liste von Datumswerten (z.B. aus einer Logdatei) nur einen Wert pro  Zeiteinheit (also z.B. pro Sekunde) auszugeben, erstellt man sich zuerst einen Wert, der die Sprungweite speichert. Da Powershell Zeitwerte in 10.000.000stel Sekunden - den sogenannten Ticks - speichert, muss die Sprungweite mit den Ticks pro Zeiteinheit multipliziert werden. Die Ticks holt man sich am Besten aus der Timespan-Klasse, weil man sich bei der Menge von Nullen schon mal vertippen kann und es auch deutlich besser lesbarer ist. Auf die Timespan-Klasse greift man mit eckigen Klammern zu: [Timespan]. 

Anschließend speichert man den ältesten Zeitwert der Liste in einer Variablen, durchläuft mit einer Foreach-Schleife die Liste und vergleicht die Ticks des Datumswert des Listenelements mit dem ersten Zeitwert. Wenn ein passender Zeitwert gefunden wurde, muss der Vergleichswert jeweils um die Range erhöht werden. Dafür muss das Listenelement das Datum als Datetime-Objekt gespeichert haben. Ist das nicht der Fall, kann man das Datum zuerst konvertieren. Das geht über die explizite Konvertierung zu Datetime oder, falls das Datum nicht korrekt erkannt wird, weil z.B. das deutsche Datumsformat tt-mm-yyyy verwendet wird, mit der statischen Datetime-Methode Parseexact.

Bei der Konvertierung kann in allen 3 Beispielen auch die Uhrzeit angegeben werden: '2024-03-02 19:01:23'. Die Kürzel für Sekunden, Minuten und Stunden sind dann ss, mm und HH. Die Groß-/Kleinschreibung ist hier wichtig, da MM für Monat und mm für Minuten steht!

Die Foreach-Schleife sieht dann ungefähr so aus:

Kommentare hinterlassen