Fórum como somar horas que ultrapassem 1 dia. #388408

13/10/2010

0

Boa noite, gostaria de solicitar uma ajuda aos colegas que puderem.

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!
Rafael

Rafael

Responder

Posts

14/10/2010

Leonardo Xavier

Tente colocar o campo de seu banco de dados do horário como texto, e realize novamente sua funçao de calculo de horário.
Responder

Gostei + 0

14/10/2010

Eriley Barbosa

De uma olhada neste tópico, mas seria melhor que os seus campos que guardam a data e hora inicial fossem um só e a final também: http://scriptbrasil.com.br/forum/index.php?showtopic=88560&st=0&p=388977&#entry388977
Responder

Gostei + 0

14/10/2010

Rafael

Muito obrigado,estarei estudando esse tópico e respondo assim que puder. Se outros usuários puderem dar outras soluções também agradeço muito! Obrigado!
Responder

Gostei + 0

20/10/2010

Rafael

   Pessoal, muito obrigado pela ajuda e boa vontade! Consegui com o usuário Jhonas de outro forum o código abaixo e adaptei para o meu caso! Funfou perfeito!

Segue o código para caso alguém também esteja precisando.

[CODE]

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

//Função converter Segundos para Horas

function Seg_Hora( Seg:LongInt ):string;
Var Hora,Min:LongInt;
  Tmp : Double;
begin
   Tmp := Seg / 3600;
   Hora := Round(Int(Tmp));
   Seg :=  Round(Seg - (Hora*3600));
   Tmp := Seg / 60;
   Min := Round(Int(Tmp));
   Seg :=  Round(Seg - (Min*60));
   Result := FormatFloat( '00', Hora )+ ':' + FormatFloat( '00', Min ) + ':' + FormatFloat( '00', Seg );
end;


procedure TForm1.Button1Click(Sender: TObject);
var total : int64; ini, fim : TDateTime;
begin
   ini := strtodatetime(Edit1.Text);
   fim := strtodatetime(Edit2.Text);

   total := SecondsBetween(ini,fim); //  retorna o numero de segundos entre a data_hora inicial e a data_hora final
   Label1.Caption := 'Tempo Total Indisponivel : '+ seg_hora(total);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   edit1.Text := '13/10/2010 13:25:10';
   edit2.Text := '14/10/2010 15:33:15';
end;

end.

[CODE]

Valeu!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar