Guten Morgen,
ich suche eine Möglichkeit, Uhrzeiten einheitlich darzustellen. Ich bekomme Zeiten wie
4:39.731 (m:ss.milisec)
oder 1:52:34 (h:mm:ss)
Ich möchte sie aber auf das Format hh:mm:ss bringen. Wie stellen ich das an?
Guten Morgen,
ich suche eine Möglichkeit, Uhrzeiten einheitlich darzustellen. Ich bekomme Zeiten wie
4:39.731 (m:ss.milisec)
oder 1:52:34 (h:mm:ss)
Ich möchte sie aber auf das Format hh:mm:ss bringen. Wie stellen ich das an?
Eine Möglichkeit wäre vielleicht ersmal alle Zeiten in Sekunden umzuwandeln und dann neu zusammen setzten.
MfG
Der_Doc
Okay.... und wie?
Welche Ursprungsbeispiele gibt es denn?
HH:MM:SS:MMM
H:MM:SS:MMM
...
Mega
Eine Möglichkeit wäre mit StringSplit
$string = 4:39.731
$erg_ms = StringSplit($string, '.')
;Da sollte dann folgendes rauskommen
;$erg_ms[0] = 2
;$erg_ms[1] = 4:39
;$erg_ms[2] = 731
Würde dann sagen die Millisekunden kannst du vernachlässigen. und machst dann einen StringSplit nach :
$erg_zeit = StringSplit($erg_ms[1] , ':')
; Da sollte dann das rauskommen
;$erg_zeit[0] = 2
;$erg_zeit[1] = 4
;$erg_zeit[2] = 39
So jetzt noch prüfen wieviele Einträge das Array hat und gegebenenfalls die Eintrage auffüllen damit du einen einheitlichen String bekommst.
Nun möchte ich aber mal nen Scriptausschnitt sehen, sonnst schreibe ich das Script noch und das ist net Sinn der Sache.
MfG
Der_Doc
wie wärs denn wenn man erstmal die Anzahl von Zahlen in den Zeiten zählt:
$hour = 2 ;es ist 02:00 Uhr, Minuten lass ich mal weg.
If StringLen($hour) = 1 Then
$hour = "0" & $hour
EndIf
MsgBox(0,"", $hour)
Hier mal mein Ergebnis. Vielleicht gehts auch kürzer, aber solange es funktioniert, ist mir das egal. Weitere Verbesserungsvorschläge sind willkommen Danke soweit.
$vid_length_read= "hh:mm:ss"
$split_1st=StringSplit($vid_length_read,'.')
$split_2nd=Stringsplit($split_1st[1],":")
Select
Case UBound($split_2nd)-1 =3
$stunden=$split_2nd[1]
If StringLen($stunden) =1 Then
$stunden="0"&$stunden
EndIf
$minuten=$split_2nd[2]
If StringLen($minuten) =1 Then
$minuten="0"&$minuten
EndIf
$sekunden=$split_2nd[3]
If StringLen($sekunden) =1 Then
$sekunden="0"&$sekunden
EndIf
Case UBound($split_2nd)-1 =2
$stunden="00"
$minuten=$split_2nd[1]
If StringLen($minuten) =1 Then
$minuten="0"&$minuten
EndIf
$sekunden=$split_2nd[2]
If StringLen($sekunden) =1 Then
$sekunden="0"&$sekunden
EndIf
Case UBound($split_2nd)-1 =1
$stunden="00"
$minuten="00"
$sekunden=$split_2nd[1]
If StringLen($sekunden) =1 Then
$sekunden="0"&$sekunden
EndIf
EndSelect
$length=$stunden&":"&$minuten&":"&$sekunden
Msgbox(0,"",$length)
Oder so:
$var = "06:6.45"
[/autoit] [autoit][/autoit] [autoit]$aArr = StringRegExp($var,"(\d*):?(\d+):(\d+\.?\d*)",2)
If Not @error Then MsgBox(64,"",StringFormat("%02s:%02s:%02s",$aArr[1],$aArr[2],Round($aArr[3])) )
Stilgar: Nicht schlecht Herr Specht!
Allerdings funktioniert z.B. $var = "06.55" nicht...
Stand auch nicht im ersten Beispiel
Dann halt so:
$var = "6.65"
[/autoit] [autoit][/autoit] [autoit]$aArr = StringRegExp($var,"(\d*):?(\d*):?(\d+\.?\d*)",2)
If Not @error Then
If $aArr[2] = "" Then
MsgBox(64,"",StringFormat("00:%02s:%02s",$aArr[1],Round($aArr[3])) )
Else
MsgBox(64,"",StringFormat("%02s:%02s:%02s",$aArr[1],$aArr[2],Round($aArr[3])) )
EndIf
EndIf
vielleicht gehts auch kürzer.
Hab mal nen "Speed-Test" für einen Film mit 01:52:34 gemacht.
Mein Script wird 0,5 sec schneller erledigt. Ich werds in eine Funktion auslagern, dann hab ich nicht soviel Code in der Schleife.