Konwersja formatu daty

0

Mam problem z poprawnym przekonwertowaniem pewnego stałego formatu daty na format daty obsługiwanej (ustawionej) w systemie Win.

1. Mam stały format daty typu: dd-mm-rrrr czyli np.: datę: 1-9-2006
2. W systemie użytkownik ustawił inny format daty, np.: rr-dd-mm
3. Przy próbie porównania obydwu dat, w celu sprawdzenia różnicy minionych dni, wystąpi błąd "is not a valid date", dlatego mój format daty musi być przekonwertowany na format używany przez system.
4. Zrobiłem taką funkcję:

function KonwertujDate(Data: string): TDate;
begin
 Result := StrToDate(FormatDateTime(ShortDateFormat, StrToDate(Data)));
end;

gdzie:

ShortDateFormat
  • zwraca wynik w postaci formatu daty ustalonej w systemie
Data
  • to moja data w formacie dd-mm-rrrr

5. Następnie "wydobywam" informację o różnicy dni:

var
 Bylo, Jest: TDateTime;
begin
 Jest := Now;
 Bylo := KonwertujDate('1-9-2006');

 Label1.Caption := inttostr(DaysBetween(Jest, Bylo));
end;

Mam problem z funkcją KonwertujDate ponieważ nie konwertuje ona daty i powstaje błąd "is not a valid date". Nie wiem gdzie popełniam błąd, a może nawet nie tak należy przeprowadzić "konwersję".

Proszę o pomoc [soczek]

0

można tak

  function KonwertujDate(Data: string): TDate;
begin
 Result := StrToDate(Data);//to bylo bezsensowne - mozna pominac funkcje
end;
var
 Bylo, Jest: TDateTime;
 sd:string;
 sep:char;
begin
 Jest := Now;


   sd := ShortDateFormat;
   sep :=  DateSeparator;
 try
    DateSeparator:='-';
    ShortDateFormat:='dd-mm-yyyy';
    Bylo := KonwertujDate('1-9-2006');
    Label1.Caption := inttostr(DaysBetween(Jest, Bylo));
 finally
 ShortDateFormat := sd;
 DateSeparator := sep;
 end;

end;
0

Hmm, no tak, chwilowa zmiana formatu daty w systemie na czas konwersji i powrót do domyślnej po skorzystaniu.

Dzięki reichel [soczek] !

0

Polecam też prostą funkcję FormatDateTime

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