Conversion de date ayant comme séparateur un espace

coulombemel Messages postés 6 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 10 février 2009 - 25 mai 2005 à 16:31
coulombemel Messages postés 6 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 10 février 2009 - 25 mai 2005 à 16:31
Bonjour,
j'ai écris une petite fonction de conversion de date, qui je croyais, supporterait n'importe quel format de date ainsi que n'importe quel séparateur de date.
Hors voici, lors que je change mon control panel pour un format EX : jj MM AA
(ayant un espace comme séparateur), la fonction StrToDate(02 02 02) plante ...

Hors si je définit un nouveau séparateur de date (ex : H) et que j'utilise ma fonction par la suite, tout fonctionne correctement ...
pourquoi???

Voici ma fonction de conversion de date:

Function ConversionDate(var lsDate : String) : Integer;
var ltSeparateurDate : PChar;
liM :Integer;
ldDateCourante : TDateTime;
lcSeparateurDate: Array [0..0] of Char;
lbPasErreur : Boolean;
begin
lbPasErreur := True;
{ Valeurs possible pour ltSeparateurDate : '-' '/' '.' }
ltSeparateurDate := StrAlloc(1);
try
{ Date courante }
ldDateCourante := Now;


{ Aller chercher le séparateur de date selon le control panel de l'usager }
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDATE, ltSeparateurDate, 10);


StrCopy(lcSeparateurDate, ltSeparateurDate);
{ Parcourir la chaine pour changer les séparateurs par celui contenu dans le control panel }
For liM := 1 to Length(lsDate) do
begin
{ Si le caractère n'est pas un chiffre }
if Not (lsDate[liM] In ['0'..'9']) then
if Not (lsDate[liM] In ['/','.','-']) then
begin
break;
lbPasErreur := true;
end
{ Si le séparateur est autre que celui retourné par le control panel on le remplace }
else if lsDate[liM] <> ltSeparateurDate then
lsDate[liM] := lcSeparateurDate[0];
end;


if Not lbPasErreur then
Result := 1
else if (StrToDate(lsDate) >= ldDateCourante) then
Result := 2
else if StrToDate(lsDate) < StrToDate('1980' + lcSeparateurDate[0] + '01' + lcSeparateurDate[0] + '01') then
Result := 2
else
begin
lsDate := FormatDateTime(CSFORMATDATE, StrToDate(lsDate));
Result := 0;
end;
StrDispose(ltSeparateurDate);
Except
result := 1;
StrDispose(ltSeparateurDate);
End;
end;

Mel
A voir également:
Rejoignez-nous