Convertir date string où l'année est absente

smr78 Messages postés 25 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 28 août 2022 - 5 déc. 2011 à 19:09
smr78 Messages postés 25 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 28 août 2022 - 9 déc. 2011 à 21:18
Bonjour,
Avec Vb.Net 2010, comment faire pour convertir en date un string où parfois l'année est absente?!
J'ai fait les tests avec Cdate(string) ou Date.Parse(string), ça me donne un bon résultat si l'heure est manquante aussi mais ce n'est pas bon si l'année est manquante et heure présente. Exemples

avec "5 déc." ça donne la date 5/12/2011 00:00:00
mais avec "5 déc. 23:00", il y a un message d'erreur "date invalide".
J'ai essayé diverses options de Date.Parse et Date.ParseExact, ça n'améliore pas vu que le CultureInfo.CurrentCulture est bien en "fr" (pour le test)
En attendant de trouver une solution simple, je vais essayer de détecter les strings avec années manquantes.
C'est dommage d'en arriver là car le site Msoft précise bien pour la méthode Date.Parse
"Cette méthode tente d'analyser la totalité de s pour éviter la levée de FormatException. Elle ignore les données non reconnues, si possible, et utilise la date actuelle pour compléter les informations manquantes se rapportant au mois, au jour et à l'année"

C'est bien vrai quand il n'y a pas l'heure, mais pas si l'année manque avec heure présente!
Merci par avance

smr78

24 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 déc. 2011 à 17:17
Bonsoir

en vb6 pas d'erreur
en vb.net une erreur est relevé

je vais te dire vb.net n'est pas du vb6
et meme corrige des erreurs du vb6

si j'ai écrit en vb6
Dim thedate As Date
thedate = CDate("5/5 23:30")

et qu'il n'y ait pas d'erreur lors de la
conversion ce n'est pas tout à fait logique
il manque l'année
donc c'est normal en vb.net (qui est strict
pour les conversions) qu'une erreur soit relevée
encore un ex en vb6 sans erreur
Dim thedate As Date
Dim mm As Integer
Dim yyyy As Integer
Dim dd As Integer
thedate = CDate("35/6 23:30")
mm = Month(thedate)
dd = Day(thedate)
yyyy = Year(thedate
)

résultat
mm = 6
dd = 1
yyyy = 1935

tout d'abord comment tu enregistres les données ?
dans une BDD ou un fichier ?
pour la date ne permet pas à l'utlisateur
d'écrire dans un textbox mais fais un system de
combobox avec astuce
le combobox pour les jours dépend du mois choisi
dans le combobox des mois
0
smr78 Messages postés 25 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 28 août 2022
9 déc. 2011 à 12:42
Bonjour,
Merci pour ces conseils.

Les données sont affichées dans un DataGridView et elles viennent d'un fichier txt (remplissage par prgramme, non par Databound), mais ce fichier est vide au départ, il n'y a que le nom des colonnes et c'est l'utilisateur qui ajoute une ligne et saisit ce qu'il veut comme valeur, mais selon le besoin des colonnes bien sûr.

Pour déterminer les rappels successifs selon des mois, semaines, jours, heures, l'utilisateur ne doit pas faire n'importe quoi, donc Combobox.
Par contre pour la date principale d'événement, comme VB6 et VB.net acceptent "5 mai" et ajoutent l'année en cours, cela me convient parfaitement, sinon l'utilisateur devrait changer sa programmation chaque année. Je vais donc éliminer l'heure si l'année manque!
Cordialement

smr78
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 déc. 2011 à 13:09
sinon l'utilisateur devrait changer sa programmation chaque année


que voilà une phrase étrange !
que signifie-t-elle ?
- la seule explication possible serait que tu fabriques un outil que tu mets à la disposition d'utilisateurs, et que ce que tu entends pas "programmation" serait en fait l'enregistrement de ses "volontés" ...
Si la réponse est oui : voilà un outil que je n'achèterais personnellement sûrement pas !
Relis tout de ce qui a été dit dans cette discussion, s'il te plait. Y compris, si tu as l'intention de laisser saisir n'importe quoi, ce que j'ai dit à propos de l'utilisation de camps de type texte.
Bonne chance dans tes réflexions.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
smr78 Messages postés 25 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 28 août 2022
9 déc. 2011 à 21:18
Bonsoir,
Pour réduire le nombre de cas de mauvaise écriture de date, il faudrait n'utiliser que des comboboxs (en n'affichant pas de choix vide), c'est ce que je fais partiellement. Mais pourquoi se priver de la souplesse de Cdate qui reconnaît une cinquantaine (au pif) de format de date et plus si je veux que mes amis britishs utilisent leur format. Alors pourquoi imposer un seul format?

Si j'ai bien compris l'usage de textboxs séparés pour jour mois année heure, l'utilisateur peut taper ce qu'il veut et il faudrait quand même contrôler si le textbox année a bien été rempli et soit afficher un message d'erreur, soit effacer l'heure si l'année manque?

Je n'ai pas prévu de vendre mon programme et il fonctionnera sans garantie... Ouf.

Je reformule mon objectif : prévenir l'arrivée de dates à venir. J'ai cité anniversaire comme exemple imparfait.

Merci pour l'attention portée à mes divagations.

Cordialement
0
Rejoignez-nous