[Ex] Additionner et convertir H:M:S:M/Sec en H:M:S:M/Sec

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

[Ex] Additionner et convertir H:M:S:M/Sec en H:M:S:M/Sec

#1

Message par Anthony »

Voici ma première contribution et qui je pense va enlever une sacrée épine du pied à beaucoup de monde car aucun sujet complet ne développe ce genre de calcul.

Ici on part d'une variable ($Var) celle-ci comporte deux durées: (10:10:10.101) et (01:01:01.010) mais pour les additionner c'est plus pareil :P

On les convertis en Milisecondes ce qui donne 36610101 millisecondes + 3661010 milisecondes = 40271111 millisecondes.
Puis on reconverti ces millisecondes en format H:M:S:M/Secondes soit dans notre exemple: 11:11:11:111 ou 11h11m11s111m/s :wink:
Add Time.au3
Add Time.au3
(1.86 Kio) Téléchargé 191 fois

Code : Tout sélectionner

; Variable Declaration
Global $TotalDurationMS

      $Var             = "Ici, se trouvent les durées => Duration: 10:10:10.101 ici il y en à une deuxième => Duration: 01:01:01.010 fin de variable"

While 1
      Sleep(1)
      $result          = StringInStr( $Var, "Duration:", 0, 1)
      If $result       ='0' Then ExitLoop
      ; ========================================================
      $Duration        = StringMid( $Var, $result+10,12)
      $Delete          = StringMid( $Var, 1, $result+21)
      $Var             = stringreplace($Var, $Delete,"")
      ; ========================================================
      $H               = StringMid( $Duration, 1,2)*1000*60*60
      $M               = StringMid( $Duration, 4,2)*1000*60
      $S               = StringMid( $Duration, 7,2)*1000
      $MS              = StringMid( $Duration,10,3)
      $TotalMS         = ($H + $M + $S + $MS)
      $TotalDurationMS = $TotalDurationMS + $TotalMS
      ; ========================================================
Wend
MsgBox(0, "Durée Totale en millisecondes:", $TotalDurationMS)               

$TotalDurationMS       = StringFormat('%.3f', $TotalDurationMS / 1000)
$TotalSec              = StringSplit($TotalDurationMS, ".")
$TotalSec              = $TotalSec[1]
$TotalMSec             = StringSplit($TotalDurationMS, ".")
$TotalMSec             = $TotalMSec[2]


$H                     = Int ($TotalSec / 3600)
$M                     = Int(($TotalSec - $H * 3600) / 60)
$S                     =      $TotalSec - $H * 3600 - $M * 60
$MS                    =      $TotalMSec

$TotalDuration = StringFormat('%02d:%02d:%02d:%03d', $H, $M, $S, $MS)
MsgBox(0, "Durée Totale en format original:", $TotalDuration)

$TotalDuration = StringFormat('%02d heures %02d minutes %02d secondes %03d millisecondes', $H, $M, $S, $MS)
MsgBox(0, "Durée Totale en format personalisé:", $TotalDuration)
Modifié en dernier par Anthony le ven. 18 mars 2011 15:41, modifié 1 fois.
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [Ex] Additionner et convertir H:M:S:M/Sec en H:M:S:M/Sec

#2

Message par zeshrek »

Mis a part les miillisecondes dont on a pas frocément l'usage, ca existait déjà, a la fois pour additionner ou soustraire

Code : Tout sélectionner

$var1 = "01:01:01"
$var2 = "10:10:10"



#include <Date.au3>

MsgBox(0, "", _TimeAdd($var1, $var2))
MsgBox(0, "", _TimeSub($var1, $var2))


Func _TimeAdd($time1, $time2)
    Local $ticks1, $ticks2, $h, $m, $s

    $HMS1 = StringSplit($time1, ":")
    $ticks1 = _TimeToTicks($HMS1[1], $HMS1[2], $HMS1[3])

    $HMS2 = StringSplit($time2, ":")
    $ticks2 = _TimeToTicks($HMS2[1], $HMS2[2], $HMS2[3])

    _TicksToTime($ticks1 + $ticks2, $h, $m, $s)

    Return $h & ":" & $m & ":" & $s
EndFunc   ;==>_TimeAdd

Func _TimeSub($time1, $time2)
    Local $ticks1, $ticks2, $ticks3, $h, $m, $s

    $HMS1 = StringSplit($time1, ":")
    $ticks1 = _TimeToTicks($HMS1[1], $HMS1[2], $HMS1[3])

    $HMS2 = StringSplit($time2, ":")
    $ticks2 = _TimeToTicks($HMS2[1], $HMS2[2], $HMS2[3])

    If $ticks2 > $ticks1 Then
        $ticks3 = $ticks1
        $ticks1 = $ticks2
        $ticks2 = $ticks3
    EndIf

    _TicksToTime($ticks1 - $ticks2, $h, $m, $s)

    Return $h & ":" & $m & ":" & $s
EndFunc   ;==>_TimeSub
Si vis pacem para bellum
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 321
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [Ex] Additionner et convertir H:M:S:M/Sec en H:M:S:M/Sec

#3

Message par Anthony »

zeshrek a écrit :Mis a part les miillisecondes dont on a pas frocément l'usage, ca existait déjà, a la fois pour additionner ou soustraire
Le but ici était surtout les millisecondes car certains programmes gerent les millisecondes genre (tsMuxeR.exe) :wink:
Si tu les prends pas en comptes la durée d'une playlist sera racourcie de quelques secondes voir pire pour additionner la playlist d'encodage d'une vidéo, il te manquera un bout :P
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Répondre