TESTER LA VALIDITÉ D'UNE DATE

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 27 juil. 2005 à 13:50
sorlok Messages postés 3 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 20 mars 2009 - 9 août 2007 à 14:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32906-tester-la-validite-d-une-date

sorlok Messages postés 3 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 20 mars 2009
9 août 2007 à 14:43
Dépassements de capacités dans tous les sens, ça marche pas du tout
stefdeus Messages postés 3 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 28 novembre 2006
28 nov. 2006 à 14:26
Le problème avec la fonction isdate() c'est qu'elle prend comme bonnes toutes les dates : DD/MM/YYYY MM/DD/YY etc.

Au moins avec cette fonction on restreint vraiment les possibiltés : la date doit être sur 8 au format DDMMYYYY et respecter un certain nombre de conditions...

Merci
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
27 sept. 2005 à 13:21
Salut Dragon
Repeter n fois la meme erreur et chronometrer le temps que ça prend n'est pas une bonne idée.
La premiere fois l'erreur va prendre beaucoup de temps a etre generer, les fois suivantes s'est quasi instantané.

Autre chose, c'est byzarre mais chez moi le temps que prend .NET a generer um erreur est de loin plus long que VB.
Faut dire aussi l'object erreur de .NET est trés complet.
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
24 sept. 2005 à 02:13
pour du VBA tu as access, word ou excel dépendant du cas
pour le VB, c'est VB6.0 qu'il faut utiliser
pour VB.net c'est VB.net lol

en passant, c'est pas le sujet ici. Tu as un forum sur le site pour ça et un engin de recherche pour trouver tes réponses si elles ont déjà été posé
Herbiti Messages postés 3 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 22 septembre 2005
23 sept. 2005 à 20:01
j'ai une question:
comment fais-je pour lire les apllications VB. Je programme en VB, mais par l'intermédiaire de access.

Je transpute le code dans access, mais la plupart du temps, il me dit que c'est une belle erreur. Que dois-je faire??

Merci
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
23 sept. 2005 à 12:43
ça dépend, en vb6.0 oui ça prend beaucoup de processus, en .net c'est un peu moins pire, mais ça se compte vraiment en dimillième de secondes.

sur plus de 10000 fois, le temps est identique. Sauf si tu dois le faire encore plus fréquent que ça, là tu vas finir par avec un tick de différence en utilisant la gestion d'erreur.

Mais bon rendu là, ça fait tu réellement une différence ??? dèsfois mieux vaut perdre ça que d'avoir un bug ou une page de code qui va quand même faloir à être parcourru et qui risque au final d'être aussi long avec toutes les divisions et surtout toutes les comparaisons à faire pour le mois
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 sept. 2005 à 09:56
Fort heureusement les logiciels ne sont pas écrits ainsi sinon on aurait constamment le sablier sur l'écran, la gestion d'erreurs consomme énormément de cycles processeurs.
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
23 sept. 2005 à 03:34
c'est quand même moins compliquer d,utiliser la fonction isdate et mettre ta date dans un champ date et si ça plante, ben elle est pas valide. Faut juste trapper l'erreur
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 sept. 2005 à 01:10
bien entendu que le 29 février 2000 a existé.
Pour être bissextile, une année doit avoir son millésime divisible par 4. Toutefois, celles dont le millésime est divisible par 100 ne sont bissextiles que si leur millésime est aussi divisible par 400 : 2000 sera bissextile, 1700, 1800 et 1900 ne l'ont pas été.
Suffit d'ouvrir le Larousse.
Herbiti Messages postés 3 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 22 septembre 2005
22 sept. 2005 à 22:06
le 29 février 2000 n'existe pas?? je ne crois pas que ce soit vrai.
sev622 Messages postés 62 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 12 septembre 2005
17 août 2005 à 18:48
merci pour ta remarque sur le type à renvoyer...on l'adapte comme on veut.
Le paramètre d'entrée est un integer parce que je demande à l'utilisateur d'entrer la date sous le format jjmmaaaa et non jj/mm/aaaa mais là aussi, il est facile d'adapter à ce que l'on veut
Silmon Messages postés 85 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 7 mai 2007
17 août 2005 à 16:08
Je suis d'accord avec Benouille en ce qui concerne les erreurs.
Forcer une erreur pour tester un resultat n'est pas une bonne solution de programmation.
En plus, une erreur prend du temps a se generer surtout en .Net avec le try catch.

Mais en parlant de temps, la fonction Isdate utilisée en .Net prend aussi beaucoup de temps a s'executer la premiere fois.
J'ai déjá demander dans le forum pourquoi mais sans reponse.
Peut-etre qu'un de vous sait.
Alors se fabriquer une fonction soi-meme n'est peut-etre pas une mauvaise idée.

Sev622 au sujet de ta fonction:
Tu devrais plutot rendre true ou false soit boolean plutot qu'un integer 0 ou 1
du genre
Function verifdate(ByVal datesaisie As Integer) AS BOOLEAN
' ----------

ton parametre d'entrée est du tipe Integer, mais si je veux tester: 12/12/05 ça ne marchera pas. Je pense que le parametre devrait etre en string.

Pendant que je parle de integer, oui c'est vrai qu'il va aussi loin que le long en VB.
Benouille, peux-tu expliquer un peu mieux cette difference entre int32 et integer. Lequel vaut mieux utiliser et dans quel cas?

Merci d'avance.
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
1 août 2005 à 15:32
en vb6.0 un type integer est l'équivalent de int16 en .net
et en 6.0 le type long est équivalent a un int32 ou un integer en .net

pour le test d,une erreur, je sasi très bien, j'ai l'ai programmer en 6.0 a cause que la source est sous 6.0. Et jai bien indiquer "au pire". Si tu es en C, la focntione isDate existe pas, donc on se débrouille autrement et la validation a partir d'une erreur est peut-être pas propre, mais c,est vite fait lol
cs_Benouille Messages postés 215 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 7 septembre 2007
1 août 2005 à 14:50
en fait un integer en vb.net n'est pas tout a fait un long, c'est un int32 mais surtout c'est un objet.

int16, int32 et int64 comme int et long sont des types simples, integer est un objet int32.

enfin si je dis pas de conneries ;)

vb nouille
cs_Benouille Messages postés 215 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 7 septembre 2007
1 août 2005 à 14:47
dragon en vb net ça donne plutot :

public function isDate(jour as string) as boolean
try
dim verification as date = cdate (jour)
return true
catch
return false
end try
end function


mais utiliser une erreur comme solution de programation, c'est pas bien !
enfin y parait ;)
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
27 juil. 2005 à 21:56
A savoir : un integer en vb.net est un long en vb6.
Mais il est vrai que les fonctions cdate() et isdate() t'auraient surement facilité la tâche.
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
27 juil. 2005 à 20:32
au pire qui fonctionne toujours et dans tout les languages (peut-être adapter avec un try/catch)

public function isDate(jour as string) as boolean
on error goto erreur
dim verification as date
verification = jour
return true
erreur:
return false
end function
sev622 Messages postés 62 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 12 septembre 2005
27 juil. 2005 à 18:37
oups ! j'utilise cette fonction pour asp, je ne savais pas qu'il y en avait une toute faite !
concernant le type integer, je n'ai pas eu de dépassement de capacité...
et pour la boucle des 400ans, je corrigerai ça plus tard.
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 juil. 2005 à 16:05
Ouais, c'est pour cà que je doute de l'efficacité de cette source, il vaux mieux utiliser la fonction standard de VB !

DarK Sidious
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
27 juil. 2005 à 15:01
Yep, y'a plein de dépassement de capacité car il ne faut pas utiliser des types Integer !

Autre petit point nécessitant une légère modification d'algo :
Le 29 février 2000 n'existe pas.
Tous les 400 ans, le 29 février est invalidé. Ce fut le cas en 1600, 2000 et ce sera le cas en 2400, 2800, ...
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 juil. 2005 à 13:50
Et tu connais la fonction IsDate de VB ?

Sinon, comment compte tu passer un interger au format jjmmaaaa sachant qu'un integer est limité à 32565 ?

DarK Sidious
Rejoignez-nous