OVH Cloud OVH Cloud

Date impossible

7 réponses
Avatar
Xav.M
Bonjour,
Je recupere une date a partir d'une formulaire, mais comment vérifier si la
date est corect?? car si j'ai par exemple: 31/06/2003 bien sur , car la
suite, ça plante..
j'utilise c++ Builder 6
exemple de mon code:
TDateTime date;
date= "valeur recupé dans le formlaire";

for (i=0;i<42;i++) //affichage des semaines dans la grille
{
StringGrid2->Cells[0][i] = date.FormatString("dd-mmm");
date=date+7;
}

merci ;-)

7 réponses

Avatar
Fabien LE LEZ
On Mon, 14 Jun 2004 00:17:51 +0200, "Xav.M" :

Je recupere une date a partir d'une formulaire, mais comment vérifier si la
date est corect?


mktime()


--
schtroumpf schtroumpf

Avatar
Pierre Maurette
"Xav.M" typa:

Bonjour,
Je recupere une date a partir d'une formulaire, mais comment vérifier si la
date est corect?? car si j'ai par exemple: 31/06/2003 bien sur , car la
suite, ça plante..
j'utilise c++ Builder 6
Votre question n'est donc pas posée sur le bon forum.

Je ne connais que des (très intéressants) groupes en anglais. Voir
peut-être:
borland.public.cppbuilder.vcl.components.using
sur le serveur:
newsgroups.borland.com
exemple de mon code:
TDateTime date;
date= "valeur recupé dans le formlaire";

for (i=0;i<42;i++) //affichage des semaines dans la grille
{
StringGrid2->Cells[0][i] = date.FormatString("dd-mmm");
dateÚte+7;
}
Ce que je ferais pour aller au plus vite:

(EditDate est le TEdit de saisie de la date dans le formulaire)

try
{
TDateTime TDT = TDateTime(EditDate->Text);
}
catch (EConvertError &exception)
{
// Traiter l'erreur. En général, retour au formulaire.
ShowMessage("Mauvais format date");
}

Attention, il peut ne pas être évident pour l'utilisateur que son
erreur vient du fait que le mois de juin ne compte que 30 jours.

Mais il y a mieux:
- initialiser à une date valide et tester à chaque frappe (OnChange du
TEdit).
- Utiliser un TMaskEdit (je trouve que ça amène plutôt des
contraintes, mais c'est personnel).
- Utilisez un TDateTimePicker (palette "Win32"). Ça fait riche, c'est
joli et facile mais je ne suis pas absolument certain que ça existe
dans toutes les versions.
--
Pierre

Avatar
Xav.M
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la
forme d'une AnsiString... d'où l'erreur avec Mktime():
[C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en
'tm *'


"Fabien LE LEZ" a écrit dans le message de
news:
On Mon, 14 Jun 2004 00:17:51 +0200, "Xav.M" :

Je recupere une date a partir d'une formulaire, mais comment vérifier si
la


date est corect?


mktime()


--
schtroumpf schtroumpf



Avatar
Martinez Jerome
Xav.M wrote:

Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la
forme d'une AnsiString... d'où l'erreur avec Mktime():
[C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en
'tm *'


Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou
meme plein d'autres languages...) la : savoir que les valeurs retournées
par des fonctions sont typées.
A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc
: AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre
plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier)
dont on ne sait absolument pas la norme (jour/mois/annee?
mois/jour/année? Voir la documentation de ton systeme d'exploitation
pour connaitre la norme de celui-ci dependant de la localisation sans
doute) en une suite d'entier (pour tm*)

Avatar
Pierre Maurette
Pierre Maurette typa:
[...]
try
{
TDateTime TDT = TDateTime(EditDate->Text);
}
catch (EConvertError &exception)
{
// Traiter l'erreur. En général, retour au formulaire.
ShowMessage("Mauvais format date");
}
J'oubliais un truc important si vous n'avez pas l'habitude: si vous

testez "normalement" votre programme à partir de l'EDI de C++ Builder
6, vous aurez l'impression que "ça plante", comme vous dites. En
réalité, il vous suffit d'acquiter ("OK") la fenêtre de l'exception du
débogueur et de relancer par F9 ou de mieux de tester hors de l'EDI en
lançant directement l'exe.
Si votre question est uniquement de savoir si la date est valide,
comme vous l'écriviez, faites:
dans le Unit1.h, ou autre nom :
...
private: // Déclarations de l'utilisateur
bool __fastcall IsMyDateValid(AnsiString s);
...

dans le Unit1.c, ou autre nom :
//---------------------------------------------------------------------------
bool __fastcall TForm1::IsMyDateValid(AnsiString s)
{
bool Result = true;
try
{
TDateTime TDT = TDateTime(s);
}
catch (EConvertError &exception)
{
Result = false;
}
return Result;
}
//---------------------------------------------------------------------------

Et pour tester, par exemple dans un gestionnaire d'évènement:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(IsMyDateValid(Edit3->Text))
{
Edit1->Text = "Date correcte";
}
else
{
Edit1->Text = "Date incorrecte";
}
}
//---------------------------------------------------------------------------
--
Pierre

Avatar
Xav.M
C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien
mieux!!!
encore merci
"Martinez Jerome" a
écrit dans le message de news:cak44i$
Xav.M wrote:

Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous
la


forme d'une AnsiString... d'où l'erreur avec Mktime():
[C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString'
en


'tm *'


Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou
meme plein d'autres languages...) la : savoir que les valeurs retournées
par des fonctions sont typées.
A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc
: AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre
plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier)
dont on ne sait absolument pas la norme (jour/mois/annee?
mois/jour/année? Voir la documentation de ton systeme d'exploitation
pour connaitre la norme de celui-ci dependant de la localisation sans
doute) en une suite d'entier (pour tm*)




Avatar
Fabien LE LEZ
On Mon, 14 Jun 2004 19:00:15 +0200, "Xav.M" :

C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien
mieux!!!
encore merci
"Martinez Jerome" a
écrit dans le message de news:cak44i$


A lire d'urgence[*] :
<http://www.giromini.org/usenet-fr/repondre.html>

[*] "d'urgence", ça veut dire : "Merci de ne pas poster sur Usenet
avant d'avoir lu complètement et sérieusement le document en question"

--
schtroumpf schtroumpf