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:
Pergunta
Micheus
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.
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
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.