Visto che Akrobaticone è curioso di sapere come funziona TimeBox allego una immagine e un codice che ne simula il valore di ritorno.
Vorrei sapere se esistono altri modi per ottenere quanto in oggetto.
'' s1 e s2 simulano il risultato del nuovo controllo TimeBox.
'' Per l'esattezza di due controlli TimeBox...'
Public Sub Main()
Dim Data1, Data2 As Date
Dim s1 As String = "01:12:08"
Dim s2 As String = "02:04:14"
Data1 = Time(s1)
Data2 = Time(s2)
Print TimeDiff(DateDiff(Data1, Data2, gb.Second))
End
Private Function TimeDiff(iSec As Integer) As String
Dim h, m, s, res As Integer
If iSec > 3600 Then
h = iSec Div 3600
res = iSec Mod 3600
m = res Div 60
s = res Mod 60
Else If iSec > 60 Then
h = 0
m = iSec Div 60
s = iSec Mod 60
Else
h = 0
m = 0
s = iSec
Endif
Return Format(h, "0#") & ":" & Format(m, "0#") & ":" & Format(s, "0#")
End
io spesso ho dati in soli secondi (posizioni e durate) ma devo visualizzare in hms e mi sono fatto una funzione cosi':
Function HMS(Secondi As Integer) As String
Dim ore As Integer
Dim minuti As Integer
Dim Sec As Integer
minuti = secondi \ 60
Sec = Secondi Mod 60
ore = minuti \ 60
minuti = minuti Mod 60
Return Format(ore, "00") & ":" & Format(minuti, "00") & ":" & Format(sec, "00")
End
Proporrei questo:
Dim Secondi As Integer
Dim s As String
Secondi = 4444
s = CStr(Time(0, 0, 0, Secondi * 1000))
'' s1 e s2 simulano il risultato del nuovo controllo TimeBox.
'' Per l'esattezza di due controlli TimeBox...'
Public Sub Main()
Dim Data1, Data2 As Date
Dim s1 As String = "01:12:08"
Dim s2 As String = "02:04:14"
Data1 = Time(s1)
Data2 = Time(s2)
Print TimeDiff(DateDiff(Data1, Data2, gb.Second))
End
Private Function TimeDiff(iSec As Integer) As String
Dim h, m, s, res As Integer
If iSec > 3600 Then
h = iSec Div 3600
res = iSec Mod 3600
m = res Div 60
s = res Mod 60
Else If iSec > 60 Then
h = 0
m = iSec Div 60
s = iSec Mod 60
Else
h = 0
m = 0
s = iSec
Endif
Return Format(h, "0#") & ":" & Format(m, "0#") & ":" & Format(s, "0#")
End
Nel tuo esempio le varie If non servono, perchè DIV se il primo numero è inferiore al secondo restituisce 0 senza problemi.
Era sufficiente questo:
Private Function TimeDiff(iSec As Integer) As String
Dim h, m, s, res As Integer
h = iSec Div 3600
res = iSec Mod 3600
m = res Div 60
s = res Mod 60
Return Format(h, "0#") & ":" & Format(m, "0#") & ":" & Format(s, "0#")
End