_TicksToTimeFormat

    • Offizieller Beitrag

    Das vorhandene _TicksToTime war mir immer zu "unhandlich". Man musste drei Variablen übergeben und konnte das Ergebnis nicht gleich in anderen Funktionen weiterverwenden.
    Deshalb habe ich diese Funktion geschrieben, die einen String zurückgibt, dessen Format man festlegen kann.

    Lange Rede....hier ist die Funktion:

    Spoiler anzeigen
    [autoit]


    MsgBox(0, 'Beispiel 1', _TicksToTimeFormat(3345757822, '%ww Wochen, %dd Tage, %hh Stunden, %mm Minuten, %ss Sekunden und %ms Millisekunden'))
    MsgBox(0, 'Beispiel 2', 'Ausgabe als "%hh:%mm:%ss":' & @CR & @CR & _TicksToTimeFormat(21227884, '%hh:%mm:%ss'))
    MsgBox(0, 'Beispiel 3', 'Ausgabe als "%mm %ss":' & @CR & @CR & _TicksToTimeFormat(67843, '%mm %ss'))
    MsgBox(0, 'Beispiel 4', 'Ausgabe als "%mm:%ss.%ms":' & @CR & @CR & _TicksToTimeFormat(597543, '%mm:%ss.%ms'))
    MsgBox(0, 'Beispiel 5', 'Ausgabe als "%mm:%ss.%ms":' & @CR & @CR & _TicksToTimeFormat(2, '%mm:%ss.%ms'))

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _TicksToTimeFormat($iTicks, $sFormat = '%hh:%mm:%ss')
    ; Description:: Diese Funktion wandelt Millisekunden in ein anzugebenes Zeitformat um
    ; Parameter(s): $iTicks = Zeit in Millisekunden
    ; $sFormat:
    ; %ww für Wochen
    ; %dd für Tage
    ; %hh für Stunden
    ; %mm für Minuten
    ; %ss für Sekunden
    ; %ms für Millisekunden
    ; sonstige Zeichen, die dazwischen stehen, werden übernommen
    ; Requirement(s): -
    ; Return Value(s): Zeit im ausgewählten Format (String)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _TicksToTimeFormat($iTicks, $sFormat = '%hh:%mm:%ss')
    Local $aTime[6], $sOut, $aTimeFormat[6] = ['ww', 'dd', 'hh', 'mm', 'ss', 'ms'], $aFormat
    $aTime[4] = Int($iTicks / 1000)
    $aTime[5] = $iTicks - $aTime[4] * 1000
    $aTime[0] = Int($aTime[4] / 604800)
    $aTime[4] = Mod($aTime[4], 604800)
    $aTime[1] = Int($aTime[4] / 86400)
    $aTime[4] = Mod($aTime[4], 86400)
    $aTime[2] = Int($aTime[4] / 3600)
    $aTime[4] = Mod($aTime[4], 3600)
    $aTime[3] = Int($aTime[4] / 60)
    $aTime[4] = Mod($aTime[4], 60)
    $aFormat = StringRegExp($sFormat, '%([^%]+)', 3)
    If Not IsArray($aFormat) Then Return SetError(1, 0, $iTicks)
    For $i = 0 To UBound($aFormat) - 1
    For $j = 0 To UBound($aTimeFormat) - 1
    If StringLeft($aFormat[$i], 2) = $aTimeFormat[$j] Then $sOut &= StringFormat('%0' & 2 + ($j = 5) & 'i', $aTime[$j]) & StringMid($aFormat[$i], 3)
    Next
    Next
    Return $sOut
    EndFunc ;==>_TicksToTimeFormat

    [/autoit]

    Edit: $aFormat nicht lokal deklariert. Behoben!

    Edit2: Millisekunden wurden nicht dreistellig angezeigt. Behoben!

    Edit3: Tage und Wochen hinzugefügt (siehe Beispiele)

    Nichts weltbewegendes, aber ich finde die Funktion ganz praktisch. :)
    Vielleicht kann sie ja noch jemand gebrauchen...

  • Hallo Oscar.

    Du hast da echt ne super Funktion gebastelt. Und einfach zu benutzen ist sie auch.
    Kann man bestimmt sehr gut gebrauchen. Außerdem ist sie kurz, das macht es einfach einen überblick zu behalten.

    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Oscar
    ein kleiner Schönheitsfehler. Wenn ich die Zeit mit Millisekunden angebe haben folgende Ausgabe:

    ConsoleWrite(_TicksToTimeFormat(2) & @CRLF)
    Ausgabe:
    00:00:00:02 <- eindeutiger wäre 00:00:00:002


    ConsoleWrite(_TicksToTimeFormat(10) & @CRLF)
    Ausgabe:
    00:00:00:10 <- eindeutiger wäre 00:00:00:010


    ConsoleWrite(_TicksToTimeFormat(123) & @CRLF)
    Ausgabe:
    00:00:00:123

    Gruß Paule