StrToDate et TFormatSettings - Delphi/Pascal - Programmation
Marsh Posté le 26-07-2005 à 19:39:10
Si je comprends bien tu désir sur le système (quelque soit les le FormatSetting) valider que l'utilisateur entre une date dans le bon format.
Dans ce cas moi je ferais comme cela:
function VerifierDate(const aDateForTest: string):boolean;
var
aDateTime: TDateTime;
begin
Result := True;
try
aDateTime := StrToDate(aDateForTest);
except
Result := False;
end;
end;
Marsh Posté le 26-07-2005 à 20:51:34
Il y a la fonction TryStrToDate pour éviter de taper soi-même le try/except.
Quand tu dis que c'est "selon l'humeur", tu veux dire qu'en donnant la même date et le même code, un coup ça marche un coup ça marche pas ?
Pour avoir mon propre FormatSettings dans mon code je faisais :
GetLocaleFormatSettings(GetThreadLocale, FormatSettings);
mais je ne vois pas en quoi le fait de le faire avec LOCALE_SYSTEM_DEFAULT poserait problème.
Marsh Posté le 27-07-2005 à 09:44:44
Non, je me suis mal expliqué.
Je ne souhaite pas vérifié si une chaine represente une date valide sur le système concerné.
Je reçois de l'exterieur une date(sous forme d'une string) et je souhaite vérifier que cette date est bien au format dd/mm/yy. Et ce, mème si le système sur lequel tourne mon programme utilise un autre système de date.
donc (quelque soit le système sur lequel le programme tourne), 22/02/05 est corect, mais 29/02/05 est incorect
Et pour repondre à antp, effectivement, avec la mème date, il me sortait des resultat different :-/
Marsh Posté le 27-07-2005 à 11:32:32
Et "temp" dans ton code c'est quoi ? Une variable globale ? T'as vérifié qu'elle était bonne ?
Marsh Posté le 27-07-2005 à 11:55:35
antp a écrit : Et "temp" dans ton code c'est quoi ? Une variable globale ? T'as vérifié qu'elle était bonne ? |
C'est pas bien de se moquer
Oui, bon, d'accord!! J'avais un peu copier/collé/élagué comme un porc.... Voila... J'ai édité mon message d'origine
Marsh Posté le 26-07-2005 à 16:03:37
J'ai une chaine représentant une date sous la forme jj/mm/aa et je souhaite tester la validité de cette date, y compris sur un système américain(ou musulman ou martien...)
Je me suis naïvement dit qu'en utilisant StrToDate(string;FormatSettings:TFormatSettings), j'allais m'en tirer, mais non.
Voici un resumé de mon code :
function TSegmentMID.VerifierDate(MaDate:string):boolean;
var FormatSettings : TFormatSettings;
begin
try
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatSettings);
FormatSettings.DateSeparator:='/';
FormatSettings.ShortDateFormat :='dd/mm/yy';
StrToDate(MaDate,FormatSettings);
result := true
except
On Exception do begin
result = false
end;
end;
end;
Des fois, ça marche, des fois, ça marche pas
Selon l'humeur, il me balance (ou non) que le 26/07/05 est une date invalide.
Quelqu'un a une solution?
Message édité par Zozol le 27-07-2005 à 11:53:27