IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

conversion de string en date


Sujet :

VB.NET

  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut conversion de string en date
    Hello,

    Un problème qui a priori est tout con...

    J'ai une string qui contient une date (datetime en fait) au format suivant :
    yyyyMMdd hh:mm:ss

    Je dois en fait comparer deux dates. L'une provenant d'une db sql server et qui est déjà de type datetime donc pas de souci. L'autre provenant d'un fichier texte et qui est formaté comme ci-dessus.

    Je fais donc quelque chose qui ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim laDateDuFicher as Date = Date.Parse(laDateEnString, leFormatQuiVaBien)

    Mon problème est que j'ai systématiquement une exception qui me dit que la string spécifiée n'est pas au bon format. J'imagine que cela se définit via le second paramètre de la fonction Parse mais je ne parviens pas à trouver le bon format à indiquer.

    Pourriez-vous m'aider svp ?

    Griftou.

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Pour le cast de string vers Datetime, regarde du côté de ParseExact. Tu pourras alors utiliser le format de date que tu souhaites.

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Lors de mes recherches, je suis tombé sur ce ParseExact mais pareil, j'ignore ce qu'il faut que j'utilise comme paramètres.

    Je crois que mes recherches ne sont pas fructueuses car j'ignore les termes qu'il me faut rechercher...

    Il y a une pléthore d'exemple avec des strings pour lesquelles, les différentes parties de la date (année, mois, jour) sont séparés mais aucun qui parle du format que j'utilise qui est pourtant, si j'ai bien tout compris, le format universel pour sql server...

  4. #4
    Membre éclairé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Par défaut
    et en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim toto as date
    toto = CDate(ta_string)

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ce serait quand même aberrant qu'une conversion où rien n'est précisé fonctionne mieux mais je vais tout de même la tester.

    EDIT : C'est bien ce que je pensais. Cela ne fonctionne pas. Conversion non valide pour le message.

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Essaye quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim laDateDuFicher as Date = Date.ParseExact(laDateEnString, "dd/MM/yyyy hh:mm:ss")
    Entour le tout d'un try/catch histoire de catcher une éventuelle exception

  7. #7
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Le try catch est là depuis belle lurette ;-)

    Sinon pour le ParseExact je veux bien mais il manque un paramètre de type IFormatProvider...

    Mais sinon, si je te suis, le format que l'on passe en paramètre est le format dans lequel la date doit être créée ? Je croyais moi qu'il s'agissait du format dans lequel la date est encodée dans la string. Histoire que la fonction sache comme la parser. Non ?

  8. #8
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Au temps pour moi, je suis allé un peu vite en effet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim laDateDuFicher as DateTime = DateTime.ParseExact(laDateEnString, "dd/MM/yyyy hh:mm:ss", CultureInfo.CurrentCulture, DateTimeStyles.AllowWhiteSpaces)
    Ceci devrait mieux convenir.
    Le format précisé correspond au format en entrée de "laDateEnString". C'est bien ça. Le format de sortie, tu t'en fiches car tu manipuleras derrière un objet DateTime et pourra donc en faire à peu près ce que tu veux.

    Au passage, je viens de voir que TryParseExact existait. Je te conseillerais donc plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim laDateDuFicher as DateTime;
    DateTime.TryParseExact(laDateEnString, "dd/MM/yyyy hh:mm:ss", CultureInfo.CurrentCulture, DateTimeStyles.AllowWhiteSpaces, laDateDuFicher)
    Autre chose, j'ai un doute sur le type utilisé. Pourquoi utilises-tu Date et pas DateTime ?

  9. #9
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par calagan99 Voir le message
    Autre chose, j'ai un doute sur le type utilisé. Pourquoi utilises-tu Date et pas DateTime ?
    Parce que je suis toujours avec le framework 2 de VS2005 ? Mon taff s'est enfin décidé d'acquérir des licences pour VS2010 mais c'est ma machine qui ne suit plus et j'attends la nouvelle XD.

    Citation Envoyé par calagan99 Voir le message
    Le format précisé correspond au format en entrée de "laDateEnString". C'est bien ça. Le format de sortie, tu t'en fiches car tu manipuleras derrière un objet DateTime et pourra donc en faire à peu près ce que tu veux.
    Ce qui fait que le format que tu mentionnes ne sera pas correct. J'ai tenté en spécifiant comme format "yyyyMMdd hh:mm:ss" mais cela ne fonctionne pas... (je vais tester avec le parseexact et le iformatprovider que tu proposes par contre).

    Sinon ma question est donc, pourquoi le format que je propose est-il refusé ?

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par griftou Voir le message
    Parce que je suis toujours avec le framework 2 de VS2005 ?
    DateTime existe depuis le 2.0.

    Sinon, il faut utiliser le format

    Car hh en minuscule, c'est les heures en format 12h et il faut mettre HH pour les heures en format 24h.

  11. #11
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    C'est pour ça que j'avais mis un "?". Je n'étais pas sûr de mon coup ^^

    Sinon de toute façon, j'ai cru comprendre que c'était la même chose au bout du compte. D'ailleurs, dans une variable de type date, il y a aussi les heures, minutes et secondes...

    Et sinon, c'est aussi en partie à cause de l'intellisense.

    Si je tape "Date." et que je vais voir dans la liste le type de "Now", je vois que c'est un type Date. Pareil si je vais voir à partir de "DateTime.". Du coup là, j'me demande pourquoi ils ont été faire 2 types s'il n'y avait pas de différences.

    Si quelqu'un a des éclaircissements...

    Par acquis de conscience, je vais tout de même tester avec DateTime aussi.
    Par contre, pour le test de ParseExact, j'obtiens le message d'erreur qui dit "String was not recognize as a valid DateTime."

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par griftou Voir le message
    Par acquis de conscience, je vais tout de même tester avec DateTime aussi.
    Par contre, pour le test de ParseExact, j'obtiens le message d'erreur qui dit "String was not recognize as a valid DateTime."
    J'ai modifié mon message : tu as la réponse.

  13. #13
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Au temps pour moi * 2, je n'avais pas fait attention au format d'entrée que tu mentionnais.
    Mais le principe était là

  14. #14
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    OMG ! Tout ça à case d'un "hh" au lieu d'un "HH". C'est pour se pendre un truc pareil !

    Enfin merci les gars. Ca fonctionne maintenant !

  15. #15
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    C'est l'essentiel!
    Désolé pour les boulettes...

    Juste une question : au final tu est parti sur le ParseExact ou sur le TryParseExact ?

  16. #16
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Au final, j'utilise le ParseExact.

    Mais tout le bloc étant un try...catch, cela revient presqu'au même.

    Par contre, si quelqu'un avant des détails sur la différence entre Date et DateTime. Ce serait cool ^^ (notez que j'pourrais aussi aller voir sur Google )

  17. #17
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par griftou Voir le message
    Par contre, si quelqu'un avant des détails sur la différence entre Date et DateTime. Ce serait cool ^^ (notez que j'pourrais aussi aller voir sur Google )
    Date n'existe pas en .Net; ce doit être un vieux nanar du VB6 que Microsoft a hélas conservé pour la "compatibilité". (un peu comme la fonction, à ne jamais utiliser, CDate, que t'a malencontreusement conseillé quelqu'un plus haut : vieux Nanar du VB , à oublier).

  18. #18
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    C'est un choix personnel, mais je te conseillerais plutôt d'utiliser le TryParse.
    La gestion d'exception est couteuse et le TryParse fait le même boulot qu'un Parse sans lever d'exception.
    Ca ne va probablement pas changer grand chose à vue d'oeil dans ton appli, mais c'est une habitude à prendre.
    Un peu de lecture sur le sujet ici.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion string to date
    Par Fanny23 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 27/01/2012, 00h24
  2. Conversion de String en Date
    Par jojodu31 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2008, 18h28
  3. conversion de string en date
    Par zandru dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/08/2008, 16h23
  4. conversion String en Date
    Par lisa-java dans le forum Langage
    Réponses: 3
    Dernier message: 12/01/2006, 16h14
  5. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo