Accueil > > > CONVERTION D'UNE CHAINE EN TDATE
CONVERTION D'UNE CHAINE EN TDATE
Information sur la source
Description
converti une chaine de caractère en TDate, comme StrToDate, mais fonctionne un peu comme dans Access. Elle prend en charge les chaines contenants une date au format suivant : - un jour, un mois et une année séparée par un caractère quelconque (comme un espace ou un slash) - JJ, JJMM, JJMMAA ou JJMMAAAA sans rien entre Le mois peut-être écrit en lettre ou en chiffre. Dans le cas où il manque le mois ou l'année, il prend la date actuelle pour compléter la date Ainsi on peut saisir : 04/09/07, 040907, 4 9 2007, 04 septembre 07, 4 sep 2007 ou encore 04sep07 J'ai mis 'mars' au lieu de 'mar' pour ne pas avoir de bugs si l'utilisateur tape le jour de la semaine en plus. Ainsi, 'mardi 05 sep 07' renvois bien 05/09/07 même si en vérité c'est un mercredi. Il me semble pas y avoir de bug...
Source
- Uses DateUtils, StrUtils, SysUtils;
-
- //------------------
-
- function countcar(s:string;c:char):integer;
- var
- i:integer;
- begin
- result:=0;
- for i:=1 to length(s) do if s[i]=c then inc(result);
- end;
-
- //------------------
-
- Function MyStrtoDate(mydate:string):tdate;
- const
- mois:array[1..12] of string=('jan','fev','mars','avr','mai','juin','juil','aou','sep','oct','nov','dec');
- var
- i:integer;
- j,m,a:word;
- begin
- result:=-1;
- mydate:=ansilowercase(mydate);
- // récup la date courante
- decodedate(date,a,m,j);
- //retire les accents pour décembre, août, février
- while pos('é',mydate)<>0 do mydate[pos('é',mydate)]:='e';
- while pos('û',mydate)<>0 do mydate[pos('û',mydate)]:='u';
- // remplace les mois en lettres par des mois en chiffres
- for i:=1 to 12 do
- if pos(mois[i],mydate)<>0 then
- begin
- insert(' '+inttostr(i)+' ',mydate,pos(mois[i],mydate));
- delete(mydate,pos(mois[i],mydate),length(mois[i]));
- break;
- end;
- // retire tous ce qui n'est pas des chiffres et remplace par un espace
- i:=1;
- for i:=1 to length(mydate) do if not (mydate[i] in ['0'..'9',' ']) then mydate[i]:=' ';
- // retire les doubles espaces
- while pos(' ',mydate)<>0 do delete(mydate,pos(' ',mydate),1);
- mydate:=trim(mydate);
- // il n'y a plus rien... on sort
- if mydate='' then exit;
- // si il n'y a pas d'espace, alors c'est la forme JJMMAA
- case countcar(mydate,' ') of
- 0:
- case length(mydate) of
- 2: mydate:=mydate+'/'+inttostr(m) +'/'+inttostr(a);
- 4: begin insert('/',mydate,3); mydate:=mydate+'/'+inttostr(a); end;
- 6,8: begin insert('/',mydate,5); insert('/',mydate,3); end;
- end
- 1: mydate:=mydate+'/'+inttostr(a);
- end;
- //remplace les espaces par des '/'
- while pos(' ',mydate)<>0 do mydate[pos(' ',mydate)]:='/';
- //verif et renvoi au format TDate
- if not TryStrToDate(mydate,result) then result:=-1;
- end;
Uses DateUtils, StrUtils, SysUtils;
//------------------
function countcar(s:string;c:char):integer;
var
i:integer;
begin
result:=0;
for i:=1 to length(s) do if s[i]=c then inc(result);
end;
//------------------
Function MyStrtoDate(mydate:string):tdate;
const
mois:array[1..12] of string=('jan','fev','mars','avr','mai','juin','juil','aou','sep','oct','nov','dec');
var
i:integer;
j,m,a:word;
begin
result:=-1;
mydate:=ansilowercase(mydate);
// récup la date courante
decodedate(date,a,m,j);
//retire les accents pour décembre, août, février
while pos('é',mydate)<>0 do mydate[pos('é',mydate)]:='e';
while pos('û',mydate)<>0 do mydate[pos('û',mydate)]:='u';
// remplace les mois en lettres par des mois en chiffres
for i:=1 to 12 do
if pos(mois[i],mydate)<>0 then
begin
insert(' '+inttostr(i)+' ',mydate,pos(mois[i],mydate));
delete(mydate,pos(mois[i],mydate),length(mois[i]));
break;
end;
// retire tous ce qui n'est pas des chiffres et remplace par un espace
i:=1;
for i:=1 to length(mydate) do if not (mydate[i] in ['0'..'9',' ']) then mydate[i]:=' ';
// retire les doubles espaces
while pos(' ',mydate)<>0 do delete(mydate,pos(' ',mydate),1);
mydate:=trim(mydate);
// il n'y a plus rien... on sort
if mydate='' then exit;
// si il n'y a pas d'espace, alors c'est la forme JJMMAA
case countcar(mydate,' ') of
0:
case length(mydate) of
2: mydate:=mydate+'/'+inttostr(m) +'/'+inttostr(a);
4: begin insert('/',mydate,3); mydate:=mydate+'/'+inttostr(a); end;
6,8: begin insert('/',mydate,5); insert('/',mydate,3); end;
end
1: mydate:=mydate+'/'+inttostr(a);
end;
//remplace les espaces par des '/'
while pos(' ',mydate)<>0 do mydate[pos(' ',mydate)]:='/';
//verif et renvoi au format TDate
if not TryStrToDate(mydate,result) then result:=-1;
end;
Historique
- 06 septembre 2007 11:36:04 :
- Modification pour tenir compte des remarques de Loda - Rajout de la fonction CountCar que j'avait oublié de mettre...
- 06 septembre 2007 11:37:00 :
- Modification pour tenir compte des remarques de Loda - Rajout de la fonction CountCar que j'avait oublié de mettre...
- 07 septembre 2007 10:40:02 :
- correction d'un petit bug...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Convertion adresse [ par Jakouz ]
Helloje ne sais pas s'il existe en delphi une function qui convertisse une adresse HTTP d'un dossier (ou d'un fichier) en une adresse ABSOLUE ... du s
probleme de date [ par Kal ]
j'aimerais savoir si il est possible de faire des operations sur les Tdatetime si oui leskelles et keske ca donne?est ce ke si je fais la difference d
StatusBar? [ par jia2812 ]
Salut les progs'!...Mon pb est tout bête, mais... C'est la 1ère fois que je me sers du contrôle StatusBar. Alors je colle évidemment au niveau des Te
Requete sql DATE ??? [ par Technoman ]
Dans un tQuery, je cherche a faire une recherche avec comme critere de recherche une date :select *from Tablewhere Datetable=???;Le ??? ne marche pas
Date : comment extraire le jour de la semaine ? [ par DAR ]
La fonction "DecodeDate" retourne le jour, le mois et l'année d'une date, mais comment faire pour connaitre le jour de la semaine correspondant : lund
date et heure d'un fichier [ par JCLK ]
salut à tousJe voudrais savoir comment récupérer la date et l'heure de modification d'un fichier.merci beaucoup
formater une date [ par pasoif ]
comment pourrai-je formater une chaine du type: mardi. 09 avril. 2002 en un format date valide (integer ou tdatetime) ? je galere dessus depuis plus
Afficher date littérale? [ par Stephanie ]
Bonjour,Je suis débutante en Delphi. Je dois créer un petit prog qui me permettra d'afficher une date entrée au clavier de format numérique et l'affic
contrôle de validité d'une date - algo [ par manudel ]
Je dois faire un contrôle de validité sur un champ date, avant de faire un commit sur un enregistrement. Je dispose de 3 champs : - un id - un champ n
changement de la bd de reference [ par choup ]
Quelque chose de bizarre pour moi :j'ai un formulaire qui a un objet "requete" : QTravaux qui utilise comme bd "travaux" et je voudrai remplacer la bd
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|