Prawidłowy format

0

Witam
Jak zwykle mam jakiś problem i nie wiem jak go rozwiązać - mam nadzieję, że wy mi pomożecie. Problem wygląda następująco: jak sprawdzić czy podany łańcuch String jest formatem godziny (tzn. czy tekst jest prawidlową godziną).

Dzięki za powięcony czas

0

Wstaw do wyjątku rzutowanie na typ TDateTime i jak wykona się wyjątek to znaczy że nie jest poprawny string :D

0

Spróbowałem tak zrobić (nie wiem tylko czy dobrze to zrobiłem):

function TNowyEd.SprCzas(Godzina: String): Boolean;
begin
  try
    StrToTime(godzina);
    Result:= True;
  except
    Result:= False;
  end;
end;

Ale ten kod nic nie daje ;(

0
function IsTime(s: string): Boolean;
begin
  Result := True;
  try
    StrToTime(s);
  except
    on EConvertError do
      Result := False;
  end;
end;
0

THX .. przerobiłem twój kodzik według moich potrzeb i już działa [browar] :)

0

Wyjątki blah... Po co dopuszczać do błedu, a potem go wychwytywać?

function checktime(t:string;var h,m,s:integer):boolean;

  function check(s:string;var a:integer;b:integer);
  var k:integer;
  begin
    check:=true;
    //if(length(s)<>2)then exit; // gwarancja zapisu hh:mm.ss
    val(s,a,k);
    if(k<>0)then exit;
    if((a<0)or(a>b))then exit;
    check:=false
  end;

var i,j:integer;
begin
  checktime:=false;
  i:=pos(#58,t);
  if(i=0)then exit;
  j:=pos(#46,t);
  if(j=0)then exit;
  if(check(copy(t,1,i-1),h,23))then exit;
  if(check(copy(t,i+1,j-i-1),m,59))then exit;
  if(check(copy(t,j+1,length(t)),s,59))then exit; // *
  checktime:=true;
end;

... 
var h,m,s:integer;
...
if(not checktime('00:01.00030'))then; // error

Nie wazne ile masz zer przed sekundami minutami, czy godzinami... ważne, zeby wartość była w zakresie. Jesli wymagsz dokładnego formatu hh:mm.ss (po 2 cyfry), to odkomentuj linijke w check().

//* 3-ci parametr copy moze byc wiekszy niz dlugosc calego ciagu... nie rzutuje, bo copy skopiuje tyle ile moze

1 użytkowników online, w tym zalogowanych: 0, gości: 1