miércoles, 16 de octubre de 2024

Funciones. Tiempos.

Función Timer

La función Timer nos devuelve el tiempo transcurrido desde medianoche en segundos. Gracias a ella podemos capturar el tiempo transcurrido, lo que la diferencia de la función Now(), que nos devuelve la fecha y la hora actual del sistema. 



Esta funcionalidad de Timer resulta de gran interés para construir cronómetros basados en el segundo como unidad de tiempo, lo que puede resultar suficiente para muchos usos. Para obtener este valor es necesario que declaremos una variable de tipo Long y asignemos a ella la función. De no hacerlo así obtendremos como resultado un valor de fecha de escasa utilidad.

Además presenta el inconveniente contrario al que observamos en Now(): si queremos saber la hora actual deberemos realizar un procedimiento de conversión de las unidades superiores (horas y minutos). El [script siguiente] (1) muestra este proceso.

Sub EjemploTimer

Dim lSeg As Long,lMin As Long,lHora As Long
      
lSeg = Timer
MsgBox lSeg, 0, "Segundos transcurridos desde medianoche"
      
'Procedimientos de converisón del Timer en horas, minutos y segundos 
lMin = Int(lSeg / 60)
lSeg = lSeg Mod 60
lHora = Int(lMin / 60)
lMin = lMin Mod 60
      
MsgBox Format(lHora,"00") & ":"& Format(lMin,"00") & ":" & Format(lSeg,"00"),  0, "Hora actual"
 
End Sub

Observa, en primer lugar, que todas las variables está definidas como de tipo Long, a fin de evitar el inconveniente indicado.

La parte del código que recurre a la función Timer se concreta en la segunda línea (lSeg = Timer), constituyendo el resto procedimientos secundarios. El primero de ellos (MsgBox lSeg, 0, "Segundos transcurridos desde medianoche") visualiza el resultado de asignar la función a la variable, y el resto ilustra el modo en que podemos obtener la hora actual del sistema realizando las operaciones pertinentes para convertir el valor obtenido en su expresión horaria. Así, por ejemplo, lMin = Int(lSeg / 60) divide el dato entre 60 para obtener el valor equivalente en minutos (lSeg = lSeg Mod 60 conserva el resto de la división como segundos) y posteriormente, mediante lHora = Int(lMin / 60obtenemos las horas, conservando el resto de la división como minutos (lMin = lMin Mod 60).

NOTA

(1) Este script es mera "traducción" del usado como ejemplo en la ayuda oficial de LibreOffice. Se aconseja acceder a ella mediante el enlace.