Visual Basic Simple
Conversione di secondi in ore e minuti
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Ricerca personalizzata

Difficoltà: 1 / 5

Quest'articolo è volto a spiegare il processo di conversione di un certo numero di secondi nel corrispondente numero di ore e minuti. L'operazione in sé è molto semplice e richiede l'utilizzo di poche e semplici operazioni aritmetiche.

Essendo un minuto formato da 60 secondi è semplicissimo risalire al numero di minuti corrispondenti ad un certo numero di secondi; si tratta in fondo di effettuare una divisione del numero di secondi per 60 e l'eventuale resto è il numero di secondi rimanenti.
In maniera analoga può essere calcolato il numero di ore. Vediamo subito l'interfaccia utente utilizzata per questo progetto:

Figura 1Il form si compone di pochi e semplici controlli: la fila superiore contiene una Label di nome lblSecondi e la corrispondente casella di testo di nome txtSecondi per permettere all'utente l'inserimento del numero di secondi. Al fine di evitare possibili errori abbiamo limitato il numero di caratteri nella casella di testo impostando la proprierà MaxLength a 8 caratteri.

Nella fila centrale abbiamo 4 Label i cui nomi sono, partendo da sinistra: lblFila1Minuti1 e la corrispondente lblFila1Minuti2, lblFila1Secondi1 e la corrispondente lblFila1Secondi2.

L'ultima fila contiene invece 6 Label: lblFila2Ore1 e la corrispondente lblFila2Ore2, lblFila2Minuti1 e la corrispondente lblFila2Minuti2 ed infine lblFila2Secondi1 con la corrispondente lblFila2Secondi2.

Tutte le caselle di testo hanno la proprietà AutoSize impostata a True per permettere l'autoridimensionamento in funzione del testo in esse inserito. Il codice si compone di una sola routine, legata all'eventoChange della TextBox txtSecondi:

  1. Option Explicit
  2. Private Sub txtSecondi_Change()
  3.     Dim Ore As Long
  4.     Dim Minuti As Long
  5.     Dim Secondi As Long
  6.     Dim Secondi2 As Long
  7.     Secondi2 = CLng(Val(txtSecondi.Text))

La prima operazione da effettuare è ovviamente il recupero del numero di secondi dalla TextBox txtSecondi. L'operazione è effettuata alla riga 9 ed utilizza un trucchetto molto semplice ed efficace; infatti se l'utente immettese nella casella di testo qualche simbolo non numerico quale una lettera in altre situazioni si verificherebbe un errore.

La funzione Val, così come la funzione CLng (e CInt, CDbl, etc....) consente di trasformare una stringa in un numero. A differenza di tutte le altre funzioni di conversione però, non è suscettibile ad errori in caso che l'input non sia un numero ben formato. Ad esempio l'espressione Val("123aaa") restituisce il risultato 123 senza generare errori; tutte le altre funzioni di conversione in questi casi producono un errore. La funzione Val però ci restituisce un numero di tipo Double; sfrutteremo pertanto la funzione CLng per convertire tale numero in un numero Long valido ovvero eliminando l'eventuale virgola decimale e le successive cifre. Il numero di secondi viene memorizzato nella variabile Secondi2.

  1.     Ore = Secondi2 \ 3600
  2.     Minuti = (Secondi2 - Ore * 3600) \ 60
  3.     Secondi = Secondi2 Mod 60

Possiamo adesso procedere alla conversione dei secondi in ore e minuti. L'operazione più semplice è effettuata alla riga 10; la divisione intera del numero di secondi per 3600 (60*60) restituisce il numero delle ore. Il resto di quest'operazione sono i rimanenti minuti e secondi.

Figura 2In effetti alla riga 11 recuperiamo il numero di minuti semplicemente detraendo dal numero di secondi totali il numero di secondi corrispondenti alle ore intere. Ad esempio se l'utente avesse immesso il numero 27575, il risultato della riga 10 sarebbe stato 7.
Per recuperare il numero di minuti dobbiamo detrarre dal numero di secondi totali (27575) il numero di secondi corrispondenti alle 7 ore intere ovvero 25200 (7*60*60).

La differenza di tale operazione (2375) indica il numero di minuti e secondi. Per recuperare il numero di minuti basterà semplicemente dividere tale valore per 60; nel nostro esempio il risultato è 39 minuti.

Infine il numero di secondi è dato dal resto di tale divisione, calcolato tramite il modulo per 60; nel nostro esempio 2375-2340 (39*60) produce il risultato 35.

  1.     lblFila1Secondi2.Caption = CStr(Secondi)
  2.     lblFila2Secondi2.Caption = CStr(Secondi)
  3.     lblFila1Minuti2.Caption = CStr(Minuti + Ore * 60)
  4.     lblFila2Minuti2.Caption = CStr(Minuti)
  5.     lblFila2Ore2.Caption = CStr(Ore)
  6. End Sub

Possiamo infine procedere ad aggiornare le varie Label presenti sul form. Il numero di secondi è uguale per entrambe le file (righe 13 e 14).

Il numero di minuti sulla prima fila non deve essere scomposto in ore e minuti e pertanto potrebbe anche essere superiore a 60. Alla riga 15 viene recuperato questo valore semplicemente moltiplicando il numero delle ore per 60 minuti e sommando questo valore al numero reale dei minuti. Nel nostro esempio 7*60=420 + 39 = 459 minuti.
Per quanto riguarda la seconda fila (riga 16) il numero di minuti non necessità di alcuna operazione, è quanto ritrovato nella variabile Minuti.

Il numero di ore è presente soltanto sulla seconda fila (riga 17) ed è contenuto nella variabile Ore.

Il problema si presenta molto semplice e richiede soltanto alcune operazioni aritmetiche. In maniera del tutto simile può essere calcolato anche il numero di giorni, mesi ed anni.

Fibia FBI
2 Marzo 2002

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli HowTo