Mit Zeiten rechnen

  • Guten Abend.

    Ich bekomme heute einfach nicht das Rätsel gelöst, wie man zum Beispiel von der jetzigen Zeit 3 Sekunden addieren kann. ?(

    Vielen Dank schonmal im voraus!

    Liebe Grüße
    Elodie

  • Guck dir mal das an

    Spoiler anzeigen
    [autoit]

    $Zeit = StringSplit ("1:00",":")
    $Rechnung = _TestZeit (@HOUR + $Zeit[1],23) & ":" & _TestZeit (@MIN + $Zeit[2],60)
    While 1
    Do
    Sleep (1000)
    Until @HOUR & ":" & @MIN = $Rechnung
    If MsgBox (256+36,"Shutdown","Willst du den Pc runterfahren?",30) <> 7 Then
    Shutdown (64)
    Exit
    Else
    $Zeit = StringSplit ($Zeit[1] +1 & ":30",":")
    $Rechnung = _TestZeit (@HOUR + $Zeit[1],24) & ":" & _TestZeit (@MIN + $Zeit[2],59)
    EndIf
    WEnd
    Func _TestZeit($Zeit,$Typ)
    IF $Zeit > $Typ Then $Zeit -= $Typ +1
    If $Zeit < 10 Then $Zeit = "0" & $Zeit
    Return $Zeit
    EndFunc

    [/autoit]

    Das hab ich mal für micht gemacht weil ich es gerad brauchte

    mfg. Jam00

    • Offizieller Beitrag
    [autoit]

    MsgBox(0, "", "Jetzt: " & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF & "Dann: " & @HOUR & ":" & @MIN & ":" & @SEC + 3)

    [/autoit]

    Edit : Oder schau dir mal das Beispiel von _TimeToTicks an:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    Global $Sec, $Min, $Hour, $Time
    ; calculate with time
    $StartTicks = _TimeToTicks(@HOUR,@MIN,@SEC)
    ; calculate 45 minutes later
    $EndTicks = $StartTicks + 45 * 60 * 1000
    _TicksToTime($EndTicks,$Hour,$Min,$Sec)
    MsgBox(262144,'' , 'New Time:' & $Hour & ":" & $Min & ":" & $Sec)

    [/autoit]
  • Hi,
    genau dafür gibts doch die _Date Funktionen. Mit _DateAdd kannst zu jedem Datum oder Uhrzeit soviel dazuaddieren oder abziehen wie du willst.

    [autoit]

    #include <Date.au3>

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

    $sNewDate = _DateAdd('s', 3, _NowCalc())
    MsgBox(4096, "", "Heute + 3 Sekunden: " & $sNewDate)

    [/autoit]
    • Offizieller Beitrag

    @anno stimmt. Mit negativem Vorzeichen kann man sogar subtrahieren .

    [autoit]

    #include <Date.au3>

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

    $sNewDate = _DateAdd('s', -3, _NowCalc())
    MsgBox(4096, "", "Heute - 3 Sekunden: " & $sNewDate)

    [/autoit]
  • Hallo Leute,

    ich greife das Thema noch einmal auf um mache es etwas komplizierter:

    Wie bringe ich es fertig verschiedene Zeitangaben zu addieren?

    Beispiel:

    0:01:20
    0:03:17
    0:12:43
    0:17:20

    Muss ich die Zeiten tatsächlich erst komplett splitten und einzeln addieren? Oder gehts eleganter?

    Gruß Mike

  • Hallo,

    ich hab da mal eine UDF geschrieben, die allerdings nur Stunden und Minuten addieren kann in der Form 03:45.
    Wenn es Dir weiterhilft, so würde der Aufruf aussehen...

    [autoit]

    #include <_TimeMin.au3>

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

    $zeit1 = _TimeToMin('01:20')
    $zeit2 = _TimeToMin('03:17')
    $zeit3 = _TimeToMin('12:43')

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

    MsgBox(0, '', _MinToTime($zeit1+$zeit2+$zeit3))

    [/autoit]


    UDF ist anbei...

    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. ;)

  • Schnuffel

    Danke
    ich hab die Idee mal aufgegriffen und für meine Zwecke diese zwei kleinen Funktionen gebaut:

    [autoit]

    Func time2sec($t2s_time)$t2s_time_a=StringSplit($t2s_time,":")Return $t2s_time_a[1]*3600+$t2s_time_a[2]*60+$t2s_time_a[3]endfuncFunc sec2time($s2t_seconds)$s2t_seconds=Number($s2t_seconds)$_h=int($s2t_seconds/3600)$_m=int(($s2t_seconds-$_h*3600)/60)$_s=int((($s2t_seconds-$_h*3600)-$_m*60))Return $_h & ":" & Stringformat("%02d",$_m) & ":" & StringFormat("%02d",$_s)endfunc

    [/autoit]


    Einmal wird eine Zeitangabe inkl. Stunden in eine Ganzzahl Gesamtsekunden gewandelt. Damit kann man dann rechnen.
    Und die zweite Funktion wandelt eine Zahl dann in Stunden : Minuten : Sekunden um.

    PS: Wo sind meine Zeilenumbrüche hin?