Avatar billede hestetoften Nybegynder
02. oktober 2008 - 17:24 Der er 10 kommentarer og
1 løsning

time fra time

Jeg har 2 edit, hver indeholder en tid i formatet "hh:mm:ss,msec" hvordan trækkes disse fra hindanden, således at jeg får Diff. mellem de to tider.?

bemærk at der er mSec med.
Avatar billede hestetoften Nybegynder
02. oktober 2008 - 21:10 #1
lukker
Avatar billede hrc Mester
02. oktober 2008 - 23:21 #2
Lukker fordi du har løst det eller lukker fordi du ikke tror nogen svarer?

Løsningen er ret let:

uses
  DateUtils;

function StrDateDiff(aSt1, aSt2: string): TDateTime;

  function MyStrToTime(aSt: string): TDateTime;
  var
    hh,mm,ss,s100: word;
  begin
    hh := StrToInt(copy(aSt,1,2));
    mm := StrToInt(copy(aSt,4,2));
    ss := StrToInt(copy(aSt,7,2));
    s100 := StrToInt(copy(aSt,10,4));
    result := EncodeTime(hh,mm,ss,s100);
  end;

var
  Time1, Time2: TDateTime;
begin
  Time1 := MyStrToTime(aSt1);
  Time2 := MyStrToTime(aSt2);
  result := Time2 - Time1;
end;

procedure TfrmMain.btnTestClick(Sender: TObject);
begin
  eOutput.Text := TimeToStr(StrDateDiff(eTime1.Text,eTime2.Text));
end;
Avatar billede arne_v Ekspert
03. oktober 2008 - 02:37 #3
MyStrToTime kunne laves som:

function MyStrToTime(aSt: string): TDateTime;

begin
  result := StrToDateTime(aSt);
end;

eller hvis man ikke er sikker på at PC er dansk:

function MyStrToTime(aSt: string): TDateTime;

var
  tfs : TFormatSettings;
 
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, tfs);
  tfs.TimeSeparator := ':';
  tfs.DecimalSeparator := ',';
  result := StrToDateTime(aSt, tfs);
end;
Avatar billede hrc Mester
03. oktober 2008 - 09:06 #4
arne: Den overvejede jeg også men valgte den hårdkodede løsning, fordi jeg tit sidder med data fra eksterne kilder og der må man alligevel programmere sig ud af det - men ja. Det sidste eksempel du nævner, er en fin løsning. Et skoleeksempel.
Avatar billede hestetoften Nybegynder
05. oktober 2008 - 23:57 #5
Jeg troede ikke lige der var nogen der kunne hjæpe mig

Så jeg jeg gik videre med en ttmmss løsning

Men jeg kikker lige på jeres eks. Og takker på forhånd
Avatar billede hestetoften Nybegynder
06. oktober 2008 - 20:47 #6
Hrc

Jeg forsøgte din metode men resultatet er uden s100 (msec) ???
Avatar billede hrc Mester
06. oktober 2008 - 21:55 #7
Du får også milisekunderne med. Desværre konverterer TimeToStr dem ikke til en streng - og jeg har ikke kunne finde en der gør det; man må lave det selv:

procedure TfrmMain.btnTestClick(Sender: TObject);
var
  hh,mm,ss,s100: word;
begin
  DecodeTime(StrDateDiff(eTime1.Text,eTime2.Text),hh,mm,ss,s100);
  eOutput.Text := format('%-2d:%-2d:%-2d:%-3d',[hh,mm,ss,s100]);
end;
Avatar billede arne_v Ekspert
07. oktober 2008 - 02:07 #8
function MyTimeToStr(t : TDateTime) : string;

var
  tfs : TFormatSettings;

begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, tfs);
  tfs.LongTimeFormat := 'hh:nn:ss,zzz';
  result := DateTimeToStr(t, tfs);
end;

virker hos mig (kan også bruges med TimeToStr hvis man ikke vil have dato med).
Avatar billede hrc Mester
07. oktober 2008 - 11:18 #9
arne: Elegant. Tænkte ikke på "zzz".
Avatar billede hestetoften Nybegynder
07. oktober 2008 - 14:11 #10
Rettede:
eOutput.Text := format('%-2d:%-2d:%-2d:%-3d',[hh,mm,ss,s100]);
Til:
eOutput.Text := format('%.2d:%.2d:%.2d:%.3d',[hh,mm,ss,s100]);
Så virkede det lige som det skulle
Læg svar for point
Avatar billede hrc Mester
07. oktober 2008 - 21:10 #11
Er det mig?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester