begin process at 2010 02 10 11:08:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

J'AI BESOIN D'AIDE !!!! :O

 > 

StrToDate


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

StrToDate

mardi 5 avril 2005 à 16:38:18 | StrToDate

sany2000

Bonjour,

Je souhaite utiliser la fonction StrToDate (const S: string;  const FormatSettings: TFormatSettings): TDateTime, pour convertir une chaine de caractere en date.

Cela fonctionne correctement lorsque le separateur de Date (FormatSettings.DateSeparator)est différent du caractère vide.

Autrement dit cela fonctionne parfaitement avec des string du type '13/12/2005' ou '12/13/2005' avec un DateSeparator egal à : '/',  ou avec des string du type '13-12-2005' ou '12-13-2005' avec un DateSeparator égal à '-'.

Le probleme arrive lorsque j'ai des dates du style '13122005' ou '12132005'. Dans ce cas de figure, le Separateur de date n'est pas explicite. Donc je ne sais pas quel caractère je dois passer a FormatSettings.DateSeparator. Lorsque je fais : FormatSettings.DateSeparator := chr(0), pour specifier le caractère nul, cela ne fonctionne pas non plus.

Quelqu'un a t'il la solution a ce probleme ?

D'avance merci ! 

Sany
mardi 5 avril 2005 à 19:49:17 | Re : StrToDate

WhiteHippo

Membre Club
Le problème vient de la façon dont Delphi gère le scan de la chaine qu'on lui passe comme date.
En mettant :
  FormatSettings.DateSeparator := chr(0);

Delphi s'attend à trouver une date de la forme :
  '10'#0'12'#0'2005' // le séparateur étant #0 ou chr(0) si tu préfères.

Il lui faut FORCEMENT un séparateur !!!

Donc, il n'y a me semble t-il pas d'autres solutions, si tu ne veux pas utiliser de separateur, que d'ecrire ta propre routine de gestion de date.

Cordialement.
mercredi 6 avril 2005 à 02:01:03 | Re : StrToDate

japee

Membre Club Administrateur CodeS-SourceS
Il en veut du séparateur, Delphi, on va lui en donner, du séparateur...

function AddSeparator(D: String; S: Char): String;
var i: Integer;
begin
  Result := '';
  if Length(D) <> 8 then Exit;
  for i := 1 to Length(D) do
  begin
    Result := Result + D[i];
    if i in [2, 4] then
      Result := Result + S;
  end;
end;


Bonne prog'

japee
mercredi 6 avril 2005 à 09:40:14 | Re : StrToDate

sany2000

Merci beaucoup pour vos reponses !

Cela confirme donc que dans le cas de figure qui m'interesse, StrToDate ne peut pas etre utilisé en l'Etat...
Je vais donc soit creer ma propre fonction de gestion de dates, soit ajouter un separateur lorsqu'il n'en existe pas...

Bonne journée !
mercredi 6 avril 2005 à 12:43:33 | Re : StrToDate

Delphiprog

Administrateur CodeS-SourceS
Attention Japee, si tu ajoutes des caractères dans ta chaine, alors la deuxième position à examiner n'est plus la quatrième mais la cinquième. Il faut donc que tu remplaces :
if i in [2, 4] then
par
if i in [2, 5] then



Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
mercredi 6 avril 2005 à 16:16:30 | Re : StrToDate

Kenavo

On peut utiliser (également dans Delphi 4) la fonction FormatMaskText

s:= FormatMaskText('00/00/0000;0;0','06042005');

Retourne bien '06/04/2005' dans s.


Il y a quand même quelque chose de rigolo :

var
  FormatSettings : TFormatSettings;
  s : string;
  Date : TDateTime;
begin
  GetLocaleFormatSettings(0, FormatSettings);
  FormatSettings.ShortDateFormat := 'ddmmyyyy';
  s := DateToStr(Now, FormatSettings); // Résultat '06042005' (aujourd'hui seulement)
  Date := StrToDate(s,FormatSettings);       // Erreur '06042005' n'est pas une date correcte !
end;

Là mon Dédé (c'est comme ça que j'apelle mon Delphi), tu déconnes !


Ken@vo

Code, Code, Codec !

P.S. Je savais pas qu'il y avait autant de choix dans les dates. 
mercredi 6 avril 2005 à 17:16:50 | Re : StrToDate

japee

Membre Club Administrateur CodeS-SourceS
Que nenni, que nenni, Delphiprog

Mon code peut bluffer à la première lecture.
Mais je ne suis pas tombé dans le piège infâme qui m'était tendu...
En fait, je rajoute le caractère séparateur dans Result, et non dans le String passé en paramètre, qui lui-même n'est pas modifié.

J'aurais par contre pu ajouter une protection plus pointue de la validité du String, mais je suis parti du principe... que j'avais pas envie, et que ça avait sans doute été fait ailleurs !

Bonne prog'
mercredi 6 avril 2005 à 21:19:55 | Re : StrToDate

Delphiprog

Administrateur CodeS-SourceS
Arf, il a raison le bougre
Sans doute que je n'avais pas envie de réfléchir trop longtemps et, du coup, c'est moi qui suis tombé dans le panneau. Bien vu Japee.

Précision : FormatMaskText est déclarée dans MaskUtils. Je ne connaissais pas cette fonction. Merci Kenavo.


Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.


Cette discussion est classée dans : date, string, dateseparator, formatsettings, strtodate


Répondre à ce message

Sujets en rapport avec ce message

Fichier typé (RECORD) [ par selma-elec ] UN fichier à été créer sur disque avec borland pascal 7.0 avec des enregistrement de ce type :Type Tata = Record Chemin : integer fonction opposée a FormatDateTime [ par Sat83 ] Bonjour, Je suis a la recherche d'une fonction qui fait l'inverse de la fonction FormatDateTime.Je m'explique: plutot que d'avoir en entrée un TDateTi comment modifier le 0 en 1536 dans un cookie [ par Kurtounet ] Bonjour Amis développeur.         Voilà mon problème.        J' ai intégré à mon application un bout de code, qui sert à créer un cookiedans le répert prob de conversion de date [ par patof ] je voudrai mettre a jour l heure du pc avec l heure du serveur intranet, mais ce que je récupère est une string de la forme : "Monday, April 14, 2003 Pourquoi ca marche pas? [ par magicvinni ] Et une deuxième question : pourquoi cette routine ne marche pas? (je voudrais convertir un string en date et si ca plante renvoyer la date d'aujourd'h PB Requete SQL :( [ par funemul ] Voila le probleme :J'utilise un Tquery et ma requete est la suivante :SELECT * FROM annee_2003 WHERE DATE_DU = 01-12-2003Et la requete ne me selection URGENT!HELP gros pb de positionnement dbase [ par kristof708 ] salut a tousen fait g du mal m'expliquer (autant pour moi)voila je crée dynamiquement une base de donnée..... with FieldDefs dobegin Add('DATE',f Pointer une table pour enregistrement (scuse delphiprog) [ par kristof708 ] > salut a tousScuse moi delphiprog pour "URGENT ETC...."je debute ds les forums (merci a toi)> en fait g du mal m'expliquer (autant pour moi)> voila j Date ... [ par MAsterC ] Comment fait-on pour vérifier si la date a changer...exemple :j'ai un label avec comme caption : 30Exécution ...Si nous reculon la date de "1" de wind Renvoi d'1 SELECT ds Variable [ par TheShAmAn ] Voici ma fonction qui doit récupérer le résultat de la requête :function Tfrmba.Select(CorpsReq: string):string; var selection : string; begin


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,014 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales