Discussione:
convertire millisecondi in ore minuti e secondi
(troppo vecchio per rispondere)
tmtube
2013-12-07 10:32:53 UTC
Permalink
dato un numero di millisecondi come si possono convertire in ore.minuti e
secondi?

grazie.
vittorio
2013-12-07 12:07:31 UTC
Permalink
Post by tmtube
dato un numero di millisecondi come si possono convertire in ore.minuti e
secondi?
se MillTime sono i Millisecondi :

Sec = (MillTime \ 1000) mod 60
Min = (Sec \ 60) Mod 60
Hrs = (Min \ 60) Mod 24
dMillTime = TimeSerial(Hrs, Min, Sec)

per riconvertire in millisecondi:
MillTime = 1000 * DatePart("s", dMillTime) + 60000 * DatePart("n",
dMillTime) + 3600000 * DatePart("h", dMillTime)
salclem2
2013-12-07 13:20:29 UTC
Permalink
Post by vittorio
Sec = (MillTime \ 1000) mod 60
Min = (Sec \ 60) Mod 60
Hrs = (Min \ 60) Mod 24
dMillTime = TimeSerial(Hrs, Min, Sec)
MillTime = 1000 * DatePart("s", dMillTime) + 60000 * DatePart("n", dMillTime) + 3600000
* DatePart("h", dMillTime)
Non mi sembra giusto, se Sec=0, questa formula porta tutto a 0
io direi:
Hrs= Fix(MillTime/1000/60/60)
Min= Fix(60*((MillTime/1000/60/60) - Fix(MillTime/1000/60/60)))
Sec= 60*(60*((MillTime/1000/60/60) - Fix(MillTime/1000/60/60))-Min)
vittorio
2013-12-07 17:38:47 UTC
Permalink
Post by salclem2
Post by vittorio
Sec = (MillTime \ 1000) mod 60
Min = (Sec \ 60) Mod 60
Hrs = (Min \ 60) Mod 24
dMillTime = TimeSerial(Hrs, Min, Sec)
MillTime = 1000 * DatePart("s", dMillTime) + 60000 * DatePart("n",
dMillTime) + 3600000 * DatePart("h", dMillTime)
Non mi sembra giusto, se Sec=0, questa formula porta tutto a 0
infatti Sec è zero se i millisecondi sono zero.
tmtube
2013-12-07 18:18:06 UTC
Permalink
Post by salclem2
Non mi sembra giusto, se Sec=0, questa formula porta tutto a 0
infatti Sec è zero se i millisecondi sono zero.
danke!!
salclem2
2013-12-07 23:13:55 UTC
Permalink
Post by vittorio
infatti Sec è zero se i millisecondi sono zero.
per un'ora abbiamo 3600000 millisecondi,
e in questo caso abbiamo
Hrs= 1
Min= 0
Sec= 0

Con la tua formula invece sarebbe tutto zero!
Stavolta hai capito?
Paperino
2013-12-07 23:55:32 UTC
Permalink
"vittorio" ha scritto
Post by vittorio
infatti Sec è zero se i millisecondi sono zero.
per un'ora abbiamo 3600000 millisecondi,
e in questo caso abbiamo
Hrs= 1
Min= 0
Sec= 0
Con la tua formula invece sarebbe tutto zero!
Stavolta hai capito?
Un calcolo del genere va effettuato al contrario.
Se non ho toppato qualcosa:

'****************
Dim Millisecondi As Long
Dim Ore As Long
Dim Minuti As Long
Dim Secondi As Long
Millisecondi = 3679873

Ore = Millisecondi \ 3600000
Debug.Print "Ore: " & Ore
Millisecondi = Millisecondi Mod 3600000
Minuti = Millisecondi \ 60000
Debug.Print "Minuti: " & Minuti
Millisecondi = Millisecondi Mod 60000
Secondi = Millisecondi \ 1000
Debug.Print "Secondi: " & Secondi
Millisecondi = Millisecondi Mod 1000
Debug.Print "Millisecondi residui: " & Millisecondi

'****************

Bye, G.
salclem2
2013-12-08 00:13:14 UTC
Permalink
Post by Paperino
Un calcolo del genere va effettuato al contrario.
'****************
Dim Millisecondi As Long
Dim Ore As Long
Dim Minuti As Long
Dim Secondi As Long <-------------------------- as single
Millisecondi = 3679873
Ore = Millisecondi \ 3600000
Debug.Print "Ore: " & Ore
Millisecondi = Millisecondi Mod 3600000
Minuti = Millisecondi \ 60000
Debug.Print "Minuti: " & Minuti
Millisecondi = Millisecondi Mod 60000
Secondi = Millisecondi \ 1000
Debug.Print "Secondi: " & Secondi
Millisecondi = Millisecondi Mod 1000
Debug.Print "Millisecondi residui: " & Millisecondi
Così va bene, ma se dichiari secondi come single fai prima,
e ti va a pennello anche la mia formula.
tmtube
2013-12-11 00:06:55 UTC
Permalink
Post by Paperino
Minuti = Millisecondi \ 60000
Debug.Print "Minuti: " & Minuti
Millisecondi = Millisecondi Mod 60000
Secondi = Millisecondi \ 1000
Debug.Print "Secondi: " & Secondi
Millisecondi = Millisecondi Mod 1000
Debug.Print "Millisecondi residui: " & Millisecondi
'****************
Bye, G.
Confermo ho usato questo codice e funziona grazie.
tmtube
2013-12-10 23:55:27 UTC
Permalink
Post by vittorio
Sec = (MillTime \ 1000) mod 60
Min = (Sec \ 60) Mod 60
Hrs = (Min \ 60) Mod 24
dMillTime = TimeSerial(Hrs, Min, Sec)
MillTime = 1000 * DatePart("s", dMillTime) + 60000 * DatePart("n",
dMillTime) + 3600000 * DatePart("h", dMillTime)
Non mi sembra giusto, se Sec=0, questa formula porta tutto a 0
Hrs= Fix(MillTime/1000/60/60)
Min= Fix(60*((MillTime/1000/60/60) - Fix(MillTime/1000/60/60)))
Sec= 60*(60*((MillTime/1000/60/60) - Fix(MillTime/1000/60/60))-Min)
ho provato questo codice ma il risultato lo ha messo in secondi anzichè in
minuti secondo voi dov'è l'errore?
cioè mi aspettavo 27 minuti stimati invece a scritto 00:00:27 cioè secondi

questo è il codice usato

Dim MillTime
Dim sec
Dim min
Dim hrs

MillTime = (2500 + DLookup("massivedelay", "aziendali")) * Me.dainviare
sec = (MillTime \ 1000) Mod 60
min = (sec \ 60) Mod 60
hrs = (min \ 60) Mod 24
Me.TEMPOSTIMATO = TimeSerial(hrs, min, sec)
Federico
2013-12-11 01:02:53 UTC
Permalink
Usa questo e non ci pensi più,
è la routine di Paperino ottimizzata
e pronta all'uso

Private Sub Form_Load()
Millisecondi = 3679873
Debug.Print DateFormat(Millisecondi)
End Sub
Public Function FormattaOra(ByVal Millisecondi As Single) As String
Dim Ore As String, Minuti As String, Secondi As String
Ore = Format(Millisecondi \ 3600000, "00")
Millisecondi = Millisecondi Mod 3600000
Minuti = Format(Millisecondi \ 60000, "00")
Millisecondi = Millisecondi Mod 60000
Secondi = Format(Millisecondi \ 1000, "00")
DateFormat = Ore & "." & Minuti & "." & Secondi
End Function

Oggi mi sento buono
Federico
2013-12-11 01:05:25 UTC
Permalink
Ho dovuto fare una correzione...

Private Sub Form_Load()
Millisecondi = 0
Debug.Print FormattaOra(Millisecondi)
End Sub
Public Function FormattaOra(ByVal Millisecondi As Single) As String
Dim Ore As String, Minuti As String, Secondi As String
Ore = Format(Millisecondi \ 3600000, "00")
Millisecondi = Millisecondi Mod 3600000
Minuti = Format(Millisecondi \ 60000, "00")
Millisecondi = Millisecondi Mod 60000
Secondi = Format(Millisecondi \ 1000, "00")
' Millisecondi = Millisecondi Mod 1000
FormattaOra = Ore & "." & Minuti & "." & Secondi
End Function

vbMizio
2013-12-09 09:27:42 UTC
Permalink
Parliamo di VB6 o VB.Net?
Se sei in net, puoi usare il metodo AddMilliSeconds del tipo Date.
Una cosa del genere:
Dim ms As Integer = 350000
Dim dt As Date = New Date().AddMilliseconds(ms)
Debug.Print(dt.ToLongTimeString)

Come vedi ho valorizzato una variabile ms (i millisecondi) assegnandoli un
valore che mi piaceva :)
Poi ho usato il metodo AddMilliSeconds esposto dal tipo Date ed ho ottenuto
una nuova data.
A questo punto posso usare la nuova data e, ad esempio, stamparmi l'orario.
Loading...