Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
Micheus

Formatando horas além das 23:59h

Question

Formatando horas além das 23:59h

O principal uso desta função é o de apresentar em relatórios ou tela, a totalização de horas com resultado superior a 23:59:59, que não é contemplada pelas funções de conversão padrão. Assim, podemos apresentar um somatório de horas como por ex. 125:38:15.

function FullTimeToStr(SUMTime: TDateTime): string;
var
  StrHor,
  StrMin :string;
  TotHor :double;
begin
  TotHor := SUMTime *24;
  if (TotHor -Trunc(TotHor)) > 0.9999 then
    TotHor := Round(TotHor);
  StrHor := FormatFloat('##0:', Int(TotHor));
  StrMin := FormatDateTime('nn:ss', Frac(TotHor)/24);
  Result := StrHor +StrMin;
end;

Explicando:

Chama-se a função passando para o parâmetro SUMTime o total de horas que se obteve na consulta ou componente. Multiplicamos por 24, para transformar os dias (parte inteira) em horas já somando com a hora cheia contida na parte fracionária.

TotHor := SUMTime *24;

O teste a seguir, visa corrigir problema relacionado a casas decimais, quando, por ex., 25.0000000008 se tornaria 24.99999 retornando 24 no uso da função Int na etapa seguinte. (correção incluida em 02/12/06)

if (TotHor -Trunc(TotHor)) > 0.9999 then

TotHor := Round(TotHor);

Em seguida, Formatamos a hora "cheia", utilizando a parte inteira da variável. A parte fracionária estará contendo os minutos e segundos.

StrHor := FormatFloat('##0:', Int(TotHor));

Dividimos a parte fracionária (atual) por 24, para obtermos novamente o formato time. Podemos então utilizar normalmente a função de formatação para obtermos a fração de tempo restante:

StrMin := FormatDateTime('nn:ss', Frac(TotHor)/24);

O resultado da função é a concatenação dos resultados:

Result := StrHor +StrMin;

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Boa tarde, através de um link passado por um usuário de uma outro Post com a intenção de me ajudar cheguei a esse tópico e essa função pode ser o solução para o meu problema então gostaria de solicitar uma ajuda aos colegas que puderem.

Preciso da função acima mas que também contabilize os segundos mas não sei como implementar isso. poderia me ajudar? Segue abaixo o meu problema...

"

Estou fazendo um sistema de falhas e preciso e preciso computar quanto tempo essa falha perdurou.

Já procurei sobre isso em alguns foruns mas sempre acho soluções usando hourbetween. Sei que essa solução pode resolver o meu problema mas não sei como aplicá-la. o meu problema é o seguinte, exemplo:

Uma falha ocorreu na data 13/10/2010 às 13:25:10h e só foi normalizada no Dia 14/10/2010 às 15:33:15h.

com o exemplo acima, o programa deve armazenar na variável "TempoIndisponivel" o total de horas em que a falha existiu, que nesse caso, preciso que seja 26:08:05h, ou seja, 26 horas, 8 minutos e 5 segundos.

Preciso que o sistema entenda que passaram-se 24 horas do início da falha e que some com as horas, minutos e segundos restantes do horário em que a falha terminou.

Estou usando Banco ACCESS o campo da Data inicial e final no access está com formato dd/mm/aaaa.

O campo hora inicial e final possuem formato hh:mm:ss.

Ainda não estou usando nenhum código para fazer isso. Tentei alguns mas não funcionaram. O método de acesso ao ACCESS é ADO.

Muito Obrigado se alguém puder ajudar! " :rolleyes:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Cloud Computing


  • Forum Statistics

    • Total Topics
      148575
    • Total Posts
      644272
×
×
  • Create New...