Anzeige

 Millisekunden umrechnen in Std min sec Millisekunden


#1
Hallo...

Habe folgende Funktion in MS Access

Eine Zeit liegt in Millisekunden vor....

Nun sollte diese Zeit in Std:min:sek,Millisekunden umgerechnet werden...

Es scheitert bei mir in der Zeile (Umrechnung von Minuten)...

Die wird so angezeigt 01:63:20,2 Die Minuten müssten auf 03 sein... Min = Int(Milsec / 60000)

Code:
Function Zeit_hhmmss0(Milsec As Double) As String

Dim Std As Long
Dim Min As Long
Dim Sec As Long
Dim Zeitmessung As String

  Std = Int(Milsec / 3600000)
  Min = Int(Milsec / 60000)
  Sec = Int((Milsec - (Min * 60000)) / 1000)
  Milsec = Milsec - (Min * 60000) - (Sec * 1000)
  Zeit_hhmmss0 = Format$(Std, "00") & ":" & Format$(Min, "00") & ":" & Format$(Sec, "00") & "." & Format$(Milsec, "0")

End Function
 

Yaslaw

n/a
Moderator
#2
Du rechnest die ganzen Millisekunden un Minuten um. 63 Minuten = 1 Stunde und 3 Minuten....

Nimm die Stunden
Aus dem Rest, nimm die Minuten
Aus dem Rest nimm die Sekunden
Der Rest sind die Millisekunden
Visual Basic:
Public Function test(iMsec As Long)
    Dim h As Long, m As Long, s As Long
    Dim rest As Long
  
    h = iMsec / 3600000
    rest = iMsec Mod 3600000
    m = rest / 60000
    rest = rest Mod 60000
    s = rest / (1000)
    rest = rest Mod (1000)
  
    test = format$(h, "00") & ":" & format$(m, "00") & ":" & format$(s, "00") & "." & format$(rest, "0")
End Function
 
#3
Danke @Yaslaw

Habe dein Beispiel bei mir verwendet..... jedoch irgendwie werden einige Beispiele falsch berechnet...

111.JPG

Feld "ZeitMsSchwimmen" ist der Wert berechnet aus ZwischenZeitSchwimmen (die Millisekunden müssten eigentlich stimmen)

Feld ZeiSchwimmen verwendet deine Funktion, dabei werden kommischerweise einige Felder falsch berechnet....
 

Yaslaw

n/a
Moderator
#4
Habe eine Bessere Funktion sofern es nicht über 24 Stunden geht
Visual Basic:
Public Function test(iMsec As Long)
    Const C_DIV = 24# * 60# * 60# * 1000#
    Dim val As Double
    Dim time As Date
   
    time = CDate(iMsec / C_DIV)
    test = format(time, "HH:NN:SS") & "," & (iMsec Mod 1000#)
End Function
Code:
?test(894600)
00:14:55,600

?test(39594600)
10:59:55,600
 
#5
aaa.jpg aaa.jpg

Hallo @Yaslaw

Danke für deine bisherigen Bemühungen....
Problem besteht noch immer, vor allem wenn die Zeit bei .... 59,9 ist.... es wird dabei offensichtlich eine Sekunde zuviel dazu gerechnet....

Hab die Access-Datei mit hochgeladen.... (hoffe nicht, dass ich dort einen Fehler bei der Berechnung in Millisekunden mache...)


Code:
Function ZeitInMilsec(Zwischenzeit As Variant) As Double

Dim Stunden As Long
Dim Minuten As Long
Dim Sekunden As Long
Dim Zehntel As Long

Stunden = Left(Zwischenzeit, 2)
Minuten = Mid(Zwischenzeit, 4, 2)
Sekunden = Mid(Zwischenzeit, 7, 2)
Zehntel = Mid(Zwischenzeit, 10, 1)

ZeitInMilsec = Stunden * 3600000 + Minuten * 60000 + Sekunden * 1000 + Zehntel * 100
End Function
Ich habe diese Funktion selbst erstellt (mit meinen bescheidenen vba-Kenntnissen)
 

Anhänge

#6
Ich habe diese Lösung in einem anderen Forum bekommen und die funktioniert komischerweise....

Code:
'// ModF zerlegt x in eine Ganzzahl und einen Nachkommaanteil.
Public Function ModF#(ByVal x#, ip&)
  ip = Fix(x)
  ModF = x - ip
End Function

Public Function MSec2HhNnSsMSec$(ByVal msec#, Optional ByVal NumHPlaces& = 2)
  
   Const MSEC_PER_HOUR& = 60& * 60 * 1000

   Dim fh#, h&, fm#, m&, fs#, s&

   fh = ModF(msec / MSEC_PER_HOUR, h)
   fm = ModF(fh * 60, m)
   fs = ModF(fm * 60, s)
   MSec2HhNnSsMSec = Format$(h, String$(NumHPlaces, "0") & ":") _
                    & Format$(m, "00:") _
                    & Format$(s, "00.") _
                    & Format$(CLng(fs * 1000), "000")
End Function
 
Anzeige

Neue Beiträge

Anzeige