Artigo: 210276 - Última revisão: quinta-feira, 15 de Março de 2007 - Revisão: 6.3

Como guardar, calcular e comparar dados de data/hora no Microsoft Access

Para obter uma versão deste artigo referente ao Microsoft Access 97, consulte 130514  (http://support.microsoft.com/kb/130514/ ) .
Moderado: Requer conhecimentos básicos sobre macros, programação e interoperabilidade.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Este artigo descreve como o Microsoft Access guarda o tipo de dados Data/hora. Este artigo também descreve por que pode receber resultados inesperados quando calcula ou compara datas e horas.

Este artigo descreve os seguintes tópicos:
  • Guardar dados de data/hora
  • Formatar um campo de data/hora
  • Calcular dados de horas
  • Comparar dados de datas
  • Comparar dados de horas

Mais Informação

Guardar os dados relativos a Data/hora

O Access guarda o tipo de dados Data/hora como um número de vírgula flutuante de precisão dupla até 15 casas decimais. A parte inteira do número de precisão dupla representa a data. A parte decimal representa a hora.

Os valores de data válidos vão de -657.434 (1 de Janeiro de 100 d.C.) a 2.958.465 (31 de Dezembro de 9999 d.C.). Um valor de data 0 representa o dia 30 de Dezembro de 1899. O Access guarda datas anteriores a 30 de Dezembro de 1899 como números negativos.

Os valores de hora válidos vão de 0,0 (00:00:00) a 0,9999 (23:59:59). O valor numérico representa uma fracção de um dia. Pode converter o valor numérico em horas, minutos e segundos multiplicando o valor numérico por 24.

A seguinte tabela mostra como o Access guarda valores de data/hora:
   Número         Parte      Data             		 Parte     	 Hora
   duplo          da data    real              		 da hora   	 real
   -----------------------------------------------------------------------------

        1,0           1     31 de Dezembro de 1899  	 0,0       	12:00:00
        2,5           2     1 de Janeiro de 1900    	 0,5        	24:00:00
    27468,96875   27468     15 de Março de 1975     	 0,96875    	23:15:00
    36836,125     36836     6 de Novembro de 2000   	 0,125       	 3:00:00
				
Para visualizar a forma como o Access guarda os valores Data/Hora com números, escreva os comandos que se seguem na janela Immediate, prima ENTER e repare nos resultados:
?CDbl(#18/5/1999 14:00:00#)
O resultado é igual a: 36298.5833333333
?CDbl(#14/12/1849 17:32:00#)
O resultado é igual a: -18278.7305555556

Para visualizar a data e a hora relativa a valores numéricos, escreva os seguintes comandos na janela Immediate, prima ENTER e repare nos resultados:
?CVDate(1.375)
O resultado é igual a: 31/12/1899 9:00:00
?CVDate(-304398.575)
O resultado é igual a: 1/8/1066 13:48:00

Formatar um campo Data/Hora

Pode formatar um valor Data/Hora para apresentar uma data, uma hora ou ambos. Quando utiliza um formato de apenas data, o Access guarda um valor 0 para a parte da hora. Quando utiliza um formato de apenas hora, o Access guarda um valor 0 para a parte da data.

A seguinte tabela mostra como o Access guarda valores de data/hora. A tabela que se segue mostra também como pode apresentar esses valores utilizando formatos diferentes:
   Valor guardado       Formato predefinido    Formato personalizado
   (número duplo)           (Data geral)         (dd-mm-aaaa hh:mm:ss)
   ---------------------------------------------------------------------

   36295,0                 15-05-99        	15-05-1999 12:00:00
       0,546527777777778   13:07                30-12-1899 13:07:00
   36232,9375              13-3-99 22:30        13-03-1999 22:30:00
				
Nota: o formato predefinido de um valor de data/hora é Data geral. Se um valor for de apenas data, não é apresentada hora. Se um valor for de apenas hora, não é apresentada data.

Calcular os dados relativos à hora

Dado que um valor de horas é guardado como uma fracção de um dia de 24 horas, poderá receber resultados com formatação incorrecta quando calcular intervalos de tempo superiores a 24 horas. Para contornar este comportamento, pode criar uma função definida pelo utilizador para se certificar de que os intervalos são correctamente formatados.

A Microsoft fornece exemplos de programação apenas a título informativo, sem garantia expressa ou implícita, incluindo, sem limitação, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador conhece a linguagem de programação apresentada e as ferramentas utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador. Para calcular e formatar correctamente períodos de tempo, siga estes passos:
  1. Crie um módulo e escreva a seguinte linha na secção Declarations, caso ainda não exista:
    Option Explicit
    					
  2. Escreva o seguinte código:
    '------------------------------------------------------------------
    '  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. Escreva a seguinte linha na janela Immediate e prima ENTER:
    ? TempoDecorrido(#1/6/1999 20:23:00#-#1/6/1999 8:12:12#)
    Repare que são apresentados os seguintes valores:
    43848 Segundos
    730:48 Minutos:Segundos
    12:12:48 Hora:Minutos:Segundos
    0 dias 12 Horas 10 Minutos 48 Segundos

Comparar os dados relativos à data

Como as datas e as horas estão guardadas em conjunto como números de precisão dupla, poderão receber resultados inesperados quando compara os dados Data/hora. Por exemplo, se escrever a seguinte expressão na janela Immediate, receberá um resultado False mesmo se a data actual for 31-3-1999:
? Now()=DateValue("31/3/1999")
A função Now() devolve um número de precisão dupla que representa a data e a hora actuais. Contudo, a função DateValue() devolve um número inteiro que representa a data, mas não um valor de horas fraccionário. Por este motivo, o resultado de Now() é igual ao de DateValue() apenas quando Now() devolve um valor 00:00:00 (12:00:00).

Para receber resultados correctos quando comparar valores de datas, utilize uma das seguintes funções. Para testar cada função, escreva a função na janela Immediate, substitua 31-3-1999 pela data actual e prima ENTER:
  • Para devolver um valor inteiro, utilize a função Date():
    ?Date()=DateValue("31/3/1999")
  • Para remover a parte fraccional da função Now(), utilize a função Int():
    ?Int(Now())=DateValue("31/3/1999")

Comparar os dados relativos à hora

Quando compara os valores relativos à hora poderá receber resultados inconsistentes porque um valor de horas está guardado como a parte fraccional de um número de vírgula flutuante de precisão dupla. Por exemplo, se escrever a expressão que se segue na janela Immediate, receberá um resultado falso (0) apesar de os dois valores de hora parecerem iguais.
var1 = #14:01:00 #
var2 = DateAdd("n", 10, var1)
? var2 = #14:11:00 #
Quando o Access converte um valor de horas numa fracção, o resultado calculado pode não ser idêntico ao valor de horas. A pequena diferença provocada pelo cálculo é suficiente para produzir um resultado falso (0) quando compara um valor guardado com um valor constante.

Para receber resultados correctos quando comparar valores de horas, utilize um dos seguintes métodos. Para testar cada método, escreva cada um na janela Immediate e prima ENTER:

Adicionar uma data associada à comparação de horas:var1 = #1/1/99 14:01:00 #
var1 = #1/1/99 14:01:00 #
var2 = DateAdd("n", 10, var1)
? var2 = #1/1/99 14:11:00 #
Converter os valores de horas em tipos de dados de cadeia antes de os comparar:
var1 = #14:01:00 #
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#14:11:00 #)
Utilizar a função DateDiff() para comparar unidades precisas, como os segundos:
var1 = #14:01:00 #
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #14:11:00 #) = 0

Referências

Para obter informações adicionais sobre como calcular valores de data e de hora, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
210604  (http://support.microsoft.com/kb/210604/ ) Funções para calcular e apresentar valores de data/hora no Access
Para obter mais informações sobre como formatar tipos de dados de data/hora, clique em Ajuda do Microsoft Access no menu Ajuda, escreva format property - date/time data type no Assistente do Office ou no Assistente de respostas e clique em Procurar para visualizar o tópico.

A informação contida neste artigo aplica-se a:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbdatetime kbfunctions kbinfo kbfaq kbhowto kbprogramming KB210276
 

Traduções de Artigos

 

Related Support Centers