Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se explica cómo almacena Access el tipo de datos de fecha y hora y por qué se pueden recibir resultados inesperados al calcular o comparar las fechas y las horas.
Almacenar datos de fecha y hora
Access almacena el tipo de datos de fecha y hora como un número de punto flotante de precisión doble (hasta 15 posiciones decimales). La parte entera del número de precisión doble representa la fecha; la parte decimal representa la hora.
Los valores de fecha válidos oscilan entre -647.434 (1 de enero de 100, A.D.) y 2.958.465 (31 de diciembre de 9999, A.D.). El valor de fecha 0 representa el 30 diciembre de 1899. Access almacena las fechas anteriores al 30 de diciembre de 1899 como números negativos.
Los valores de hora válidos oscilan entre ,0 (00:00:00) y ,99999 (23:59:59). Los valores numéricos representan una fracción de un día. Dichos valores se pueden convertir en horas, minutos y segundos multiplicando por 24 el valor numérico.
Número doble | Parte de fecha | Fecha real | Parte de la hora | Tiempo real |
---|---|---|---|---|
1.0 | 1 | 31 de diciembre de 1899 | ,0 | 12:00:00 a.m. |
2,5 | 2 | 1 de enero de 1900 | ,5 | 12:00:00 p.m. |
27468,96875 | 27468 | 15 de enero de 1975 | ,96875 | 11:15:00 p.m. |
33914,125 | 33914 | 6 de noviembre de 1992 |
Calcular datos de tiempo
Dado que el valor de hora se almacena como fracción de un día de 24 horas, es posible que los resultados de formato que reciba sean incorrectos cuando calcule intervalos de tiempo mayores que 24 horas. Para solucionar este problema, puede crear una función definida por el usuario para asegurarse de que los intervalos de tiempo tengan el formato correcto.
El procedimiento siguiente ilustra la manera de usar la función Format para dar formato a los intervalos de tiempo. Dicho procedimiento acepta dos valores de hora e imprime el intervalo existente entre ellos en la ventana Inmediato en varios formatos diferentes.
Function ElapsedTime(endTime As Date, startTime As Date)
Dim strOutput As String
Dim Interval As Date
' Calculate the time interval.
Interval = endTime - startTime
' Format and print the time interval in seconds.
strOutput = Int(CSng(Interval * 24 * 3600)) & " Seconds"
Debug.Print strOutput
' Format and print the time interval in minutes and seconds.
strOutput = Int(CSng(Interval * 24 * 60)) & ":" & Format(Interval, "ss") _
& " Minutes:Seconds"
Debug.Print strOutput
' Format and print the time interval in hours, minutes and seconds.
strOutput = Int(CSng(Interval * 24)) & ":" & Format(Interval, "nn:ss") _
& " Hours:Minutes:Seconds"
Debug.Print strOutput
' Format and print the time interval in days, hours, minutes and seconds.
strOutput = Int(CSng(Interval)) & " days " & Format(Interval, "hh") _
& " Hours " & Format(Interval, "nn") & " Minutes " & _
Format(Interval, "ss") & " Seconds"
Debug.Print strOutput
End Function
Comparar datos de fecha
Dado que las fechas y las horas se almacenan juntas como números de precisión doble, es posible que reciba resultados inesperados cuando compare datos de fecha y hora. Por ejemplo, si escribe la siguiente expresión en la ventana Inmediato, recibirá el resultado False (0) aun cuando la fecha de hoy sea 11/07/2006:
? Now()=DateValue("7/11/2006")
La función Now devuelve un número de precisión doble que representa la fecha y hora actuales. Sin embargo, la función DateValue devuelve un número entero que representa la fecha pero no un valor de hora fraccionario. En consecuencia, Now sólo será igual a DateValue cuando Now devuelva la hora 00:00:00 (12:00:00 a.m.).
Para recibir resultados precisos al comparar valores de fecha, utilice una de las funciones siguientes. Para probar cada función, escríbala en la ventana Inmediato, utilice la fecha actual en lugar de 7/11/2006 y, a continuación, presione ENTRAR:
Para devolver un valor entero, use la función Date :
?Date()=DateValue("7/11/2006")
Para quitar la parte fraccionaria de la función Now , use la función Int :
?Int(Now())=DateValue("7/11/2006")
Comparación de datos de tiempo
Cuando compare valores de hora, es posible que los resultados que reciba sean incoherentes, ya que el valor de hora se almacena como parte fraccionaria de un número de punto flotante de precisión doble. Por ejemplo, si escribe la siguiente expresión en la ventana Inmediato, recibirá el resultado False (0) aunque los dos valores de hora parezcan iguales:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #2:11:00 PM#
Cuando Access convierte un valor de hora en una fracción, es posible que el resultado calculado no sea el equivalente exacto del valor de hora. La pequeña diferencia causada por el cálculo es suficiente para producir un resultado False (0) al comparar un valor almacenado con un valor de constante.
Para recibir resultados precisos al comparar valores de hora, utilice uno de los métodos siguientes. Para probar cada método, escríbalo en la ventana Inmediato y, a continuación, presione ENTRAR:
Agregue una fecha asociada a la comparación de horas:
var1 = #7/11/2006 2:00:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #7/11/2006 2:10:00 PM#
Convierta los valores de hora en tipos de datos String antes de compararlos:
var1 = #2:00:00 PM#
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#2:10:00 PM#)
Use la función DateDiff para comparar unidades precisas, como segundos:
var1 = #2:00:00 PM#
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #2:10:00 PM#) = 0
Información sobre los colaboradores
Vínculo proporcionado por de la comunidad) de la comunidad utterAccess .
UtterAccess es el principal foro de ayuda y wiki de Microsoft Access.
Vea también
- Acceso al foro de desarrolladores
- Acceso a la ayuda en support.office.com
- Acceso a foros en UtterAccess
- Acceso al centro de ayuda de programadores VBA y desarrolladores (FMS)
- Acceso a las publicaciones en StackOverflow
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.