Access & VBA FAQ
| | | |
Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Módulos
Base de datos
Miscelánea
API
Utilidades
Problemas
Cadenas
Fechas
Todos los temas
Fechas : TimeToString
Autor/es:
Juan M. Sánchez
Pregunta : Estoy haciendo un sistema de control horario y me encuentro con una dificultad que no se resolver. En una tabla tengo una serie de campos tipo Fecha/Hora, en donde se almacenan los tiempos de trabajo del personal. Cuando intento sumar esos tiempos para sacar un total, si el valor acumulado de horas es mayor de 24, vuelve a empezar desde 0. Es decir, 13:00:00 + 12:00:00 me lo representa como 1:00:00 y yo, lo que quiero, es que me lo represente como 25:00:00. ¿Es eso posible o es que Access no mueve horas mayores de 24 horas?
Respuesta : Access sí entiende horas más allá de 24 horas, pero lo que hace cuando se encuentra en un caso como ese es internamente almacenar un día y empezar a contar horas desde cero. Es decir, en el caso de 13:00:00 + 12:00:00, lo que hace Access es 1 día + 1:00:00, pero como el usuario ha pedido que se represente sólo la parte de las horas para ese campo, pues Access sumiso y obediente, le hace caso y eso es lo que el usuario ve al final.

Lo que necesitamos es una función que transforme el resultado de esa suma o valor y le de el formato que nosotros necesitamos en casos como éste.

La función TimeToString transforma un valor tipo fecha (que internamente es un valor doble) a una cadena del tipo hora larga ("00:00:00").

Tiene los siguientes

Argumentos

ArgumentoDescripción
IntervalRequerido. Un número doble representando una fecha. Puede venir de la suma de dos o más fechas o simplemente puede ser un número de tipo doble.
Su uso es muy simple. Aquí pongo algún ejemplo de uso:
' Esto devolverá "47:59:58"
MsgBox TimeToString(CDate("23:59:59") + CDate("23:59:59"))

' Esto devolverá "24:00:00"
MsgBox TimeToString(CDbl(1))

' Esto devolverá "86:00:00"

Dim hora1 As Date, hora2 As Date
Dim hora3 As Date, hora4 As Date

 hora1 = CDate("20:00:00")
 hora2 = CDate("21:00:00")
 hora3 = CDate("22:00:00")
 hora4 = CDate("23:00:00")
   
 MsgBox TimeToString(hora1 + hora2 + hora3 + hora4)
Pega esta función en un módulo estandar
'---------------------------------------------------------
'
' TimeToString
'
' Código escrito originalmente por Juan M. Sánchez.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
'
' Este código se brinda por cortesía de
' Juan M. Sánchez
'
Function TimeToString(Interval As Double) As String
    TimeToString = DateDiff("h", 0, Interval) & _
                   Format$(Interval, ":nn:ss")
End Function
'---------------------------------------------------------

Ejemplos:

 

Temas relacionados:

StrTimeToDate

 

Última actualización: 9/2/2005