Ir para conteúdo
Fórum Script Brasil
  • 0

Formatando horas além das 23:59h


Micheus

Pergunta

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;

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...