Minutenzähler

  • Ich wollte mal fragen, ob es eine UDF gibt, die einen Timerinit/timerdiff nachmacht, aber die Zeitspanne halt in HH:MM:SS zurückgibt.

    ich wollte die folgendermaßen benutzen:

    [autoit]


    ;gui erstellen
    while 1
    switch $nmsg = guigetmsg
    case ;.......
    endswitch
    ;UDF als timer
    ;guictrlsetdata(label1,"Du spielst schon: " & ;Zeitstring")
    sleep(1)
    wend

    [/autoit]

    MFG Sebastian

  • ich fürchte nein, aber Du kannst mein kleines Script verwenden.

    Spoiler anzeigen
    [autoit]

    $begin = TimerInit()
    sleep(3000)
    $dif = TimerDiff($begin)
    MsgBox(0,"Time Difference",_MinToTime(Floor($dif/60000)))

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

    ; #INDEX# =======================================================================================================================
    ; Title .........: TimeMin
    ; AutoIt Version: 3.2.3++
    ; Language: English
    ; Description: Functions that assist with Time calculation.
    ; ===============================================================================================================================
    ; ------------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.0
    ; Language: English
    ; Description: Functions that assist with Time management.
    ;
    ; ------------------------------------------------------------------------------

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _TimetoMin()
    ; Description ...: Change the format from Time to Minutes like: 08:45 --> +525
    ; Syntax.........: _TimetoMin($msg)
    ; Parameters ....: $msg - Time to convert, format: "(+/-)05:04"
    ; Return values .: Success - Time in minutes with "+/-digits"
    ; Failure: @error - 1 = Function called with wrong Parameter (not in format (+/-)hh:mm)
    ; Author ........: Oliver Zimmermann <o_z at gmx dot net>
    ; Modified.......:
    ; Remarks .......: If called with prefix then the function returns incl. prefix (+/-), otherwise without prefix
    ; Related .......: _MintoTime()
    ; Link ..........;
    ; Example .......; No
    ; ===============================================================================================================================
    Func _TimetoMin($msg)
    Local $vz, $Mins1, $Mins2, $sumtoMin
    If StringLeft($msg,1)="+" Then
    $msg=StringTrimLeft($msg,1)
    ElseIf StringLeft($msg,1)="-" Then
    $vz="-"
    $msg=StringTrimLeft($msg,1)
    EndIf
    $msg=StringSplit($msg,":")
    If @error=1 Then
    setError(1)
    Return 0
    EndIf
    If StringIsDigit($msg[1])=0 Or StringIsDigit($msg[2])=0 Or $msg[2]>59 Then
    setError(1)
    Return 0
    EndIf
    $msg[1]=$msg[1]*60
    $sumtoMin=$msg[1]+$msg[2]
    If $vz="" Then $vz="+"
    $msg=0
    setError(0)
    Return($vz&$sumtoMin)
    EndFunc

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MintoTime()
    ; Description ...: Change the format from minutes to Time format like: 08:45 --> +525
    ; Syntax.........: _MintoTime($msg)
    ; Parameters ....: $msg - Minutes to convert, format: "+/-digits"
    ; Return values .: Success - Time in format "+/-hh:mm"
    ; Failure: @error - 1 = Function called with wrong Parameter (not in format (+/-)digits)
    ; Author ........: Oliver Zimmermann <o_z at gmx dot net>
    ; Modified.......:
    ; Remarks .......: If called with prefix then the function returns incl. prefix (+/-), otherwise without prefix
    ; Related .......: _TimetoMin()
    ; Link ..........;
    ; Example .......; No
    ; ===============================================================================================================================
    Func _MintoTime($msg)
    Local $Hours, $Mins, $vz
    If StringLeft($msg,1)="+" Then
    $msg=StringTrimLeft($msg,1)
    $vz=""
    ElseIf StringLeft($msg,1)="-" Then
    $vz="-"
    $msg=StringTrimLeft($msg,1)
    EndIf
    If StringIsDigit($msg)=0 Then
    SetError(1)
    Return(0)
    EndIf
    $Hours=StringSplit($msg/60,".")
    $Mins=$msg-($Hours[1]*60)
    If $Mins<10 Then $Mins="0"&$Mins
    If $Hours[1]<10 Then $Hours[1]="0"&$Hours[1]
    $msg=0
    setError(0)
    Return ($vz&$Hours[1]&":"&$Mins)
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hey Namensvetter

    oder nimm meins was ich einfacher finde, aber entscheide selbst

    Func:

    Spoiler anzeigen
    [autoit]

    #include <string.au3>
    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _VergangeneZeit
    ; Description ...: Gibt die vergangene Zeit im Format HH:MM:SS an
    ; Parameters ....: $Timer - Handle von TimerInit
    ; Return values .: Success - Vergangene Zeit im Format HH:MM:SS
    ; Author ........: Keyle
    ; Requirement....: string.au3
    ; ===============================================================================================================================

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

    Func _VergangeneZeit($Timer)
    $Diff = TimerDiff($Timer)
    $Sekunden = Round($Diff / 1000,0)
    $Minuten = Round($Sekunden / 60,0)
    $Stunden = Round($Minuten / 60,0)
    $Minuten = $Minuten - ($Stunden*60)
    $Sekunden = $Sekunden - ($Minuten*60)
    $Sekunden = _StringRepeat("0",2-StringLen($Sekunden)) & $Sekunden
    $Minuten = _StringRepeat("0",2-StringLen($Minuten)) & $Minuten
    $Stunden = _StringRepeat("0",2-StringLen($Stunden)) & $Stunden
    Return $Stunden & ":" &$Minuten & ":" &$Sekunden
    EndFunc

    [/autoit]

    Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <VergangeneZeit.au3>

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

    $AnfangsTimer = TimerInit()
    Sleep(12000)
    $VergangeneZeit = _VergangeneZeit($AnfangsTimer)
    MsgBox(0,"Vergangene Zeit:",$VergangeneZeit)

    [/autoit]

    Mfg Keyle

  • Die funktion finde ich einfacher :=)

    solltest vielleicht noch hinschreiben:
    ;Voraussetzung: strings.au3

    MFG Sebastian

    • Offizieller Beitrag

    Eigentlich gibt es dafür ja bereits eine Funktion in den UDFs: _TicksToTime()

    Wenn man sich die Funktion aber mal anschaut:

    [autoit]


    Func _TicksToTime($iTicks, ByRef $iHours, ByRef $iMins, ByRef $iSecs)
    If Number($iTicks) > 0 Then
    $iTicks = Round($iTicks / 1000)
    $iHours = Int($iTicks / 3600)
    $iTicks = Mod($iTicks, 3600)
    $iMins = Int($iTicks / 60)
    $iSecs = Round(Mod($iTicks, 60))
    ; If $iHours = 0 then $iHours = 24
    Return 1
    ElseIf Number($iTicks) = 0 Then
    $iHours = 0
    $iTicks = 0
    $iMins = 0
    $iSecs = 0
    Return 1
    Else
    SetError(1)
    Return 0
    EndIf
    EndFunc ;==>_TicksToTime

    [/autoit]


    muss ich sagen, dass ist irgendwie ziemlich umständlich.
    Ich finde das so wesentlich besser:

    [autoit]


    Func _TicksToTime($iTicks)
    Local $iHours, $iMins, $iSecs = Int($iTicks / 1000)
    $iHours = Int($iSecs / 3600)
    $iSecs = Mod($iSecs, 3600)
    $iMins = Int($iSecs / 60)
    $iSecs = Mod($iSecs, 60)
    Return StringFormat('%02i:%02i:%02i', $iHours, $iMins, $iSecs)
    EndFunc ;==>_TicksToTime

    [/autoit]