Cómo almacenar, calcular y comparar datos de fecha y hora en Microsoft Access

Seleccione idioma Seleccione idioma
Id. de artículo: 210276 - Ver los productos a los que se aplica este artículo
Para obtener una versión de este artículo para Microsoft Access 97, vea 130514.
Moderada: requiere conocimientos básicos de macros, código e interoperabilidad.

Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describe cómo almacena Microsoft Access el tipo de datos de fecha y hora. En este artículo también se describe por qué pueden recibirse resultados inesperados al calcular o comparar fechas y horas.

En este artículo se describen los siguientes temas:
  • Almacenar datos de fecha y hora
  • Dar formato a un campo de fecha y hora
  • Calcular datos de hora
  • Comparar datos de fecha
  • Comparar datos de hora

Más información

Almacenar datos de fecha y hora

Access almacena el tipo de datos de fecha y hora como un número de coma flotante de doble precisión, con hasta 15 posiciones decimales. La parte entera del número de doble precisión representa la fecha. La parte decimal representa la hora.

Son válidas las fechas comprendidas en el intervalo de -657.434 (1 de enero de 100 A.C.) a 2.958.465 (31 de diciembre de 9999), ambas inclusive. Un valor de fecha de 0 representa el 30 de diciembre de 1899. Access almacena las fechas anteriores al 30 de diciembre de 1899 en forma de números negativos.

Son válidas las horas comprendidas entre 0,0 (00:00:00) y 0,99999 (23:59:59). El valor numérico representa una fracción de un día. Puede convertir el valor numérico en horas, minutos y segundos multiplicándolo por 24.

La tabla siguiente muestra cómo almacena Access los valores de fecha y hora:
Contraer esta tablaAmpliar esta tabla
NúmeroParteFechaParteHora
doblede fecharealde horareal
1.0131 diciembre 1899.012:00:00 a.m.
2.521 de enero 1900.512:00:00 p.m.
27468.968752746815 de marzo 1975.9687511:15:00 p.m.
36836.125368366 noviembre 2000.1253:00:00 a.m.

Para ver cómo almacena Access los valores de fecha y hora en forma de números, escriba los comandos siguientes en la ventana Inmediata, presione ENTRAR y, a continuación, observe los resultados:
?CDbl(#5/18/1999 14:00:00#)
El resultado es: 36298.5833333333
?CDbl(#12/14/1849 17:32:00#)
El resultado es: -18278.7305555556

Para ver la fecha y la hora de valores numéricos, escriba los comandos siguientes en la ventana Inmediata, presione ENTRAR y, a continuación, observe los resultados:
?CVDate(1.375)
El resultado es: 12/31/1899 9:00:00 a.m.
?CVDate(-304398.575)
El resultado es: 8/1/1066 1:48:00 p.m.

Dar formato a un campo de fecha y hora

Puede dar formato a un valor de fecha y hora para mostrar una fecha, una hora o ambas. Al utilizar un formato de solo fecha, Access almacena el valor 0 para la parte correspondiente a la hora. Al utilizar un formato de solo hora, Access almacena el valor 0 para la parte correspondiente a la fecha.

La tabla siguiente muestra cómo almacena Access los valores de fecha y hora. La tabla siguiente también ilustra cómo puede mostrar esos valores utilizando diferentes formatos:
Contraer esta tablaAmpliar esta tabla
Valor almacenadoFormato predeterminadoFormato personalizado
(número doble)(fecha general)(mm/dd/aaaa hh:nn:ss a.m./p.m.)
36295.05/15/9905/15/1999 12:00:00 a.m.
0.5465277777777781:07 p.m.12/30/1899 01:07:00 p.m.
36232.93753/13/99 10:30 p.m.03/13/1999 10:30:00 p.m.
Nota: el formato predeterminado para un valor de fecha y hora es el de fecha general. Si un valor es sólo de fecha, no aparece la hora. Si el valor es sólo de hora, no aparece la fecha

Calcular datos de hora

Dado que un valor de hora se almacena como una fracción de un día de 24 horas, puede recibir los resultados en un formato incorrecto al intentar calcular intervalos de hora mayores de 24 horas. Para evitar este comportamiento, puede crear una función definida por el usuario para asegurarse de que se da formato a los intervalos de tiempo correctamente.

Microsoft proporciona ejemplos de programación sólo como ilustración, sin ninguna garantía ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas. Para calcular y dar formato correctamente a los intervalos de tiempo, siga estos pasos:
  1. Cree un nuevo módulo y escriba la línea siguiente en la sección Declaraciones si no aparece ya allí:
    Option Explicit
    					
  2. Escriba el procedimiento siguiente:
    '------------------------------------------------------------------
    '  This function calculates the elapsed time between two values and then 
    '  formats the result in four different ways.
    '
    '  The function accepts interval arguments such as the following:
    '
    '     #5/12/95 6:00:00AM# - #5/11/95 10:00:00PM#
    '
    '     
    '
    '     [End Time]-[Start Time]
    '------------------------------------------------------------------
    
    Function ElapsedTime (Interval)
      Dim x
      x = Int(CSng(Interval * 24 * 3600)) & " Seconds"
      Debug.Print x
      x = Int(CSng(Interval * 24 * 60)) & ":" & Format(Interval, "ss") _
         & " Minutes:Seconds"
      Debug.Print x
      x = Int(CSng(Interval * 24)) & ":" & Format(Interval, "nn:ss") _
         & " Hours:Minutes:Seconds"
      Debug.Print x
      x = Int(CSng(Interval)) & " days " & Format(Interval, "hh") _
         & " Hours " & Format(Interval, "nn") & " Minutes " & _
         Format(Interval, "ss") & " Seconds"
      Debug.Print x
    
    End Function
    					
  3. En la ventana Inmediata, escriba la línea siguiente y presione ENTRAR:
    ? ElapsedTime(#6/1/1999 8:23:00PM#-#6/1/1999 8:12:12AM#)
    Observe que aparecen los valores siguientes:
    43848 Segundos
    730:48 Minutos:Segundos
    12:10:48 Horas:Minutos:Segundos
    0 días 12 Horas 10 Minutos 48 Segundos

Comparar datos de fecha

Dado que las fechas y horas se almacenan juntos como números de doble precisión, puede recibir resultados inesperados al comparar datos de fecha y hora. Por ejemplo, si escribe la expresión siguiente en la ventana Inmediata, recibe un resultado False aun cuando la fecha de hoy sea 3/31/1999:
? Now()=DateValue("3/31/1999")
La función Now() devuelve un número de doble precisión que representa la fecha y la hora actual. Sin embargo, la función DateValue () devuelve un número entero que representa la fecha pero no un valor de tiempo fraccionario. Por consiguiente, Now() sólo iguala a DateValue() cuando Now() devuelve la hora 00:00:00 (12:00:00 a.m.).

Para recibir los resultados exactos al comparar valores de fecha, utilice una de las funciones siguientes. Para probar cada función, escríbala en la ventana Inmediata, sustituya la fecha actual por 3/31/1999 y, a continuación, presione ENTRAR:
  • Para devolver un valor entero, utilice la función Date():
    ?Date()=DateValue("3/31/1999")
  • Para quitar la parte fraccionaria de la función Now(), utilice la función Int():
    ?Int(Now())=DateValue("3/31/1999")

Comparar datos de hora

Al comparar los valores de tiempo, puede recibir resultados incoherentes porque un valor de tiempo se almacena como la parte fraccionaria de un número en coma flotante de doble precisión. Por ejemplo, si escribe la expresión siguiente en la ventana Inmediata, recibe un 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, el resultado calculado no puede ser idéntico al valor de hora. La pequeña diferencia debida al cálculo es suficiente para generar un resultado false (0) al comparar un valor almacenado con un valor constante.

Para recibir resultados exactos al comparar valores de hora, utilice uno de los métodos siguientes. Para probar cada método, escríbalo en la ventana Inmediata y presione ENTRAR:

Agregar una fecha asociada a la comparación de hora:
var1 = #1/1/99 2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #1/1/99 2:11:00 PM#
Convertir los valores de tiempo en tipos de datos cadena antes de compararlos:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#2:11:00 PM#)
Utilizar la función DateDiff () para comparar unidades precisas como segundos:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #2:11:00 PM#) = 0

Referencias

Para obtener más información acerca de cómo calcular valores de fecha y hora, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
210604 Funciones para calcular y para mostrar los valores de fecha y hora en Access
Para obtener más información acerca de cómo dar formato a los tipos de datos de fecha y hora, haga clic en Ayuda de Microsoft Access en el menú Ayuda, escriba dar formato al tipo de datos de fecha y hora, y a la propiedad en el Ayudante para Office o en el Asistente para ayuda, y haga clic en Buscar para ver el tema.

Propiedades

Id. de artículo: 210276 - Última revisión: miércoles, 13 de junio de 2007 - Versión: 6.1
La información de este artículo se refiere a:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
Palabras clave: 
kbdatetime kbfunctions kbinfo kbfaq kbhowto kbprogramming KB210276

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com