Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 17 Aprile 2019, 23:50:49

Titolo: Ottenere ore minuti e secondi dai soli secondi
Inserito da: Gianluigi - 17 Aprile 2019, 23:50:49
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.

Codice: [Seleziona]
'' 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
Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: akrobaticone - 18 Aprile 2019, 09:00:43
In sostanza Timebox è un controllo che permette di impostare ora minuti e secondi
mooooolto utile per me
il codice mi sembra corretto

Grazie Gianluigi
Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: allegfede - 18 Aprile 2019, 12:28:02
io spesso ho dati in soli secondi (posizioni e durate) ma devo visualizzare in hms e mi sono fatto una funzione cosi':
Codice: [Seleziona]
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
Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: Gianluigi - 18 Aprile 2019, 13:27:03
io spesso ho dati in soli secondi (posizioni e durate) ma devo visualizzare in hms e mi sono fatto una funzione cosi':
...

Decisamente meno codice  :D
Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: vuott - 18 Aprile 2019, 18:10:33
Proporrei questo:

Codice: [Seleziona]
Dim Secondi As Integer
Dim s As String

  Secondi = 4444

  s = CStr(Time(0, 0, 0, Secondi * 1000))

Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: Gianluigi - 18 Aprile 2019, 19:15:31
Proporrei questo:

Codice: [Seleziona]
Dim Secondi As Integer
Dim s As String

  Secondi = 4444

  s = CStr(Date(0, 0, 0, 0, 0, 0, Secondi * 1000))


 :D Credo che più corto di così sia impossibile  :D
Ho cercato di capirlo ma non ci sono riuscito.
Ti andrebbe di spiegare come fa a funzionare?
 :ciao:
Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: Top Fuel - 18 Aprile 2019, 22:17:15
Codice: [Seleziona]
'' 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:

Codice: [Seleziona]
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
Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: Gianluigi - 18 Aprile 2019, 22:32:42
Grazie,
già avevo avuto il sospetto che potesse funzionare così come hai scritto, e poi li codice di allegfede lo aveva rafforzato, ma se non capisco a fondo preferisco del codice in più ma essere sicuro che funzioni.
Per i tempi di esecuzione credo cambi poco...
La mia è matematica elementare, sig!

P.S. Solo una precisazione: ho capito perché funziona il codice suggerito da TopFuel vale a dire la prima parte della funzione.
Gradirei capire anche il codice di vuott  ;D
Titolo: Re:Ottenere ore minuti e secondi dai soli secondi
Inserito da: vuott - 18 Aprile 2019, 23:50:51
Gradirei capire anche il codice di vuott 

Non capisco cosa ci sia da capire.

(https://media.giphy.com/media/TiA6LAuW8LqhO/giphy.gif)