Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original.
Tradução
Original

Como: Calcular o tempo decorrido

Office 2013

Última alteração: segunda-feira, 9 de março de 2015

Aplica-se a: Access 2013 | Office 2013

Neste artigo
Armazenando dados de data/hora
Calculando dados de hora
Comparando dados de data
Comparando dados de hora
Sobre os Colaboradores

Este tópico explica como o Microsoft Access armazena o tipo de dados Data/Hora e porque você pode receber resultados inesperados ao calcular ou comparar datas e horas.

O Microsoft Access armazena o tipo de dados Data/Hora como um número de ponto flutuante (até 15 casas decimais) e precisão dupla. A parte inteira do número de precisão dupla representa a data; a parte decimal representa a hora.

Valores de data válidos vão de -647.434 (1º de janeiro de 100 D.C.) a 2.958.465 (31 de dezembro de 9999 D.C.). Um valor de data 0 represena 30 de dezembro de 1899. O Microsoft Access armazena datas anteriores a 30 de dezembro de 1899 como números negativos.

Valores de hora válidos vão de 0,0 (00:00:00) a 0,99999 (23:59:59). O valor numérico representa uma fração de um dia. Você pode converter o valor numérico em horas, minutos e segundos multiplicando o valor numérico por 24.

Número duplo

Parte da data

Data real

Parte da hora

Hora real

1,0

1

31 de dezembro de 1899

0,0

00:00:00

2,5

2

1º de janeiro de 1900

0,5

12:00:00

27468,96875

27468

15 de março de 1975

0,96875

23:15:00

33914,125

33914

6 de novembro de 1992

Como o valor de hora é armazenado como uma fração de um dia de 24 horas, você poderá receber resultados de formatação incorretos ao calcular intervalos de tempo superiores a 24 horas. Para contornar esse comportamento, crie uma função definida pelo usuário para garantir a formatação correta dos intervalos de tempo.

O procedimento a seguir ilustra como usar a função Format para formatar intervalos de tempo. O procedimento aceita dois valores de hora e imprime o intervalo entre eles na janela Imediata em vários 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

Como datas e horas são armazenadas juntas como números de precisão dupla, você poderá receber resultados inesperados ao comparar dados de data/hora. Por exemplo, se você digitar a expressão a seguir na janela Imediata, receberá um resultado Falso (0) mesmo que a data de hoje seja 11/7/2006:

? Now()=DateValue("7/11/2006")

A função Now retorna um número de precisão dupla representando a data e hora atuais. No entanto, a função DateValue retorna um número inteiro representando a data, mas não um valor de hora fracional. Como resultado, Now é igual a DateValue apenas quando retorna a hora 00:00:00.

Para receber resultados precisos ao comparar valores de data, use uma das funções a seguir. Para testar cada função, digite-a na janela Imediata, substitua a data atual por 11/7/2006 e pressione ENTER:

Para retornar um valor inteiro, use a função Date:

?Date()=DateValue("7/11/2006")

Para remover a parte fracional da função Now, use a função Int:

?Int(Now())=DateValue("7/11/2006")

Ao comparar valores de hora, você poderá receber resultados inconsistentes porque um valor de hora é armazenado como uma parte fracional de um número de ponto flutuante e precisão dupla. Por exemplo, se você digitar a expressão a seguir na janela Imediata, receberá um resultado Falso (0) embora os dois valores de tempo pareçam iguais:

var1 = #2:01:00 PM# 
var2 = DateAdd("n", 10, var1) 
? var2 = #2:11:00 PM# 

Quando o Microsoft Access converte um valor de hora em uma fração, o resultado calculado pode não ser o equivalente exato do valor de tempo. A pequena diferença causada pelo cálculo é suficiente para produzir um resultado Falso (0) ao comparar um valor armazenado a um valor constante.

Para receber resultados precisos ao comparar valores de hora, use um dos métodos a seguir. Para testar cada método, digite-o na janela Imediata e pressione ENTER:

Adicione uma data associada à comparação de tempo:

var1 = #7/11/2006 2:00:00 PM# 
var2 = DateAdd("n", 10, var1) 
? var2 = #7/11/2006 2:10:00 PM#

Converta os valores de hora em tipos de dados Cadeia de Caracteres antes de compará-los:

var1 = #2:00:00 PM# 
var2 = DateAdd("n", 10, var1) 
? CStr(var2) = CStr(#2:10:00 PM#)

Use a função 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

Link fornecido por: Comunidade do UtterAccess | Sobre os Colaboradores

UtterAccess é o fórum principal de wiki e a Ajuda do Microsoft Access. clique aqui para ingressar.

A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2015 Microsoft