StrToDate et TFormatSettings

StrToDate et TFormatSettings - Delphi/Pascal - Programmation

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
Reply

Marsh Posté le 26-07-2005 à 16:03:37   

Reply

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;
 
 
 


---------------
Téléchargez mes prorgrammes Freeware.
Reply

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.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 :-/

Reply

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 ? :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 ? :D


C'est pas bien de se moquer  :cry:  
 
Oui, bon, d'accord!! J'avais un peu copier/collé/élagué comme un porc.... Voila... J'ai édité mon message d'origine  :kaola:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed