In Autoit rechnung mit Zeit

04/28/2011 21:58 Ludder231#1
Hallo,

ich wollte fragen wie man es anstellt eine Zeit rechung zu machen?
Also z.B: ich hab ein Label wo "00 min 00 sek" steht und jetzt möchte ich das die benötigte Zeit in dem Label angeben wird. D.h: wenn mein Prgramm für etwas 10sek(10000ms) braucht und es den Schritt, wofür das Programm 10sek braucht, das z.B 7 mal wiederholt braucht es ja 70sek(70000ms) wie rechnet man das und gibt es wieder. Weil 70 sek sind ja 1 min und 10 sek, aber ich weiß halt nicht wie man das da eingibt das der wenn man 70 oder 80 sek hat das der 1 min 10 sek oder halt 1 min 20 sek usw macht.

Sorry für die komische Formulierung wusste keine bessere :confused:

MfG Ludder231
04/28/2011 23:03 BlackHybrid#2
Ich hab vor kurzer Zeit mal drauf losgeschrieben und eine Func gemacht, die von einer Zeit eine andere abzieht. Ich denke du kannst dir daraus das Prinzip erklären.
PHP Code:
Func _WunschAnkunft($Uhrzeit$Laufzeit)
    
$aAnkunft StringSplit($Uhrzeit":")
    
$aLaufzeit StringSplit($Laufzeit":")
    
$S1 $aAnkunft[3] - $aLaufzeit[3]
    If 
$S1 0 Then
        $Sp 
1
        $S 
60 $S1
    
Else
        
$S $S1
    
EndIf
    
$M1 $aAnkunft[2] - $aLaufzeit[2]
    If 
IsDeclared("Sp"Then
        
If $Sp 1 Then
            $M1 
-= $Sp
        
EndIf
    EndIf
    If 
$M1 0 Then
        $Mp 
1
        $M 
60 $M1
    
Else
        
$M $M1
    
EndIf
    
$H1 $aAnkunft[1] - $aLaufzeit[1]
    If 
IsDeclared("Mp"Then
        
If $Mp 1 Then
            $H1 
-= $Mp
        
EndIf
    EndIf
    If 
$H1 0 Then
        $H 
24 $Mp
    
Else
        
$H $H1
    
EndIf
    If 
StringLen($S) = 1 Then
        $S 
"0" $S
    
EndIf
    If 
StringLen($M) = 1 Then
        $M 
"0" $M
    
EndIf
    Return (
$H ":" $M ":" $S
Und für alle die jetzt denken was ein merkwürdiger Quelltext ich hab einfach mal drauf los geschrieben und das ist eben rausgekommen :D
04/28/2011 23:05 Ludder231#3
Okay danke, werde mir das morgen mal reinziehen :)
04/29/2011 02:08 lolkop#4
ich hätte jetz einfach eine funktion wie diese geschrieben :s

Code:
Func ms2string($ms)
	Local $min = $ms/60000
	Return Int($min) & ' min '& Int(($min-Int($min))*60) & 'sec'
EndFunc
04/29/2011 02:12 BlackHybrid#5
Ah Int wars hab die Func vergessen. So isses natürlich am besten.
04/29/2011 02:19 lolkop#6
naja Int() schneidet ja quasi blos die nachkommastellen weg, und ist somit schneller als Floor().

Floor könnte natürlich genauso gut genutzt werden. auch Mod() wäre hier eine sinvolle mathematische funktion. war mir aber nicht sicher ob Mod() bei größeren zahlen wirklich effizient arbeitet, und habe deshlab einfach das ganze nur mit Int() gelöst =)
04/29/2011 02:24 BlackHybrid#7
Jo klar. Aber meine Func da oben ist doch auch lustig. Meine Scripts sind halt für 64bit ausgelegt 32er würdens nicht schaffen :P
04/29/2011 02:48 lolkop#8
du scheinst da einen kleinen fehler in dem script zu haben.

würde dir aber auch in dem falle empfehlen einmalig alles umzurechnen in sekunden, und diese dann zu dividieren =)

danach einfach wieder alles umrechnen in das gesuchte format

zb so:
Code:
Func divide($zeit1, $zeit2)
	Local $t1 = StringSplit($zeit1, ':'), $t2 = StringSplit($zeit2, ':')
	If $t1[0] <> 3 Or $t2[0] <> 3 Then Return False
	Local $sec = ($t1[1]*3600 + $t1[2]*60 + $t1[3]) - ($t2[1]*3600 + $t2[2]*60 + $t2[3])
	If $sec<0 Then $sec += 24*3600
	Local $hour = Int($sec/3600)
	Local $minute = Int(($sec-$hour*3600)/60)
	Local $seconds = Int($sec-$hour*3600-$minute*60)
	Return StringFormat('%02d:%02d:%02d', $hour, $minute, $seconds)
EndFunc
Edit:
Sry es wäre natürlich eig subtraktion und nicht division :s
04/29/2011 02:58 BlackHybrid#9
Ui vielen Dank. Wollts sowieso nochmal neu machen.
Bin jetzt aber off muss heute wieder früh raus.
04/29/2011 13:40 MoepMeep#10
zeit(in sekunden)/60 -> minuten
zeit(in sekunden)%60 -> sekunden

Warum so kompliziert? ~.~
04/29/2011 14:19 lolkop#11
hatte ich doch oben schon geschrieben :s
weis nicht genau wie der pc modulo umsetzt, bin mir aber recht sicher das es eine iterative subtraktion ist.

wenn ich bereits dividiert habe, habe ich meinen gesuchten wert ja aber eigentlich bereits damit erhalten, und brauch nurnoch den ergebnis wert vom ganzen abziehen, was rein logisch deutlich effizienter wäre von der umsetzung her :o
05/01/2011 11:35 MoepMeep#12
Du sprichst bei AutoIt über effizienz?
05/01/2011 12:47 lolkop#13
Quote:
Originally Posted by MoepMeep View Post
Du sprichst bei AutoIt über effizienz?
ja? :O

ich spreche imma von effizienz egal was ich mache :o