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

C# Discussion :

Conversion string en date et heure


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut Conversion string en date et heure
    Bonjour,

    J'ai quelques soucis de conversions de string en date et heure.
    Voilà mon problème :

    J'ai une String de format jj/mm/aaaa et une de format hh:mm:ss, et je voudrais les insérer dans une base de données Firebird. Dans cette base, la colonne date est au format date, et la colonne heure est au format time. Mon problème c'est que j'arrive seulement à convertir mes string en datetime(jj/mm/aaaa hh:mm:ss), j'ai donc une erreur à l'insertion de mes données. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DateTime.Parse(readerTransfstock["TSDATE"].ToString())
    DateTime.Parse(readerTransfstock["TSTIME"].ToString())
    Comment puis-je faire pour convertir au format date, et time?

    Merci d'avance pour votre aide!

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    ouais, enfin il te suffit de faire une conversion de ta date.. c'est quand meme pas la mere à boire d'écrire 3 lignes de codes pour convertir une string dans un format dans un autre ?

    Surtout qu'à priori, la string que t'as (date et temps) , tu les crées comment ?

    tu peux utiliser la fonction string.Split() pour recuperer chaque element
    de ta date et apres, tu fais un string.Format() de base...

    franchement, c trivial


    The Monz, Toulouse

    PS : Désolé d'etre un peu dur mais ca me parait tellement basique comme question que je me demande depuis combien de temps on peut faire de l'info pour en poser une telle

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Merci pour ta réponse fort sympathique...

    Désolée, je suis en étude d'info donc je ne connais pas tout, et j'ai commencé le C# il y a 2 semaines. Ce n'est pas forcément facile...

    Mes string je les récupère d'une base de données SQL Server CE. Je ne peux pas les mettre au format date et time car ça n'existe pas dans SQL Server CE.

    Cette application sert en fait à faire la liaison entre une base de données SQL Server CE (pour PDA), et une base Firebird. Voilà pour les explications.
    Mais je vais essayer de trouver comment faire.

    Merci quand même pour ton aide.

  4. #4
    Membre Expert

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Par défaut
    Convert.ToDateTime(monString);

  5. #5
    Membre éclairé Avatar de DonkeyMaster
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 95
    Par défaut
    Il faudrait te tourner vers String.Format(), je suis d'accord.
    Bonne chance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DateTime data = DateTime.Parse(ma_date);
    String date = data.ToString("d");
    String heure = data.ToString("T");
     
    String sql = "insert ma_table ( date , heure ) values ('" + date + "', '" + heure + "')";
    Il n'y a plus qu'à mettre ça dans ta requête SQL tel quel, et ça devrait marcher!

  6. #6
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Pour ce qui est d'insérer des paramètres dans un query, il est préférable d'utiliser les requêtes paramêtrées qui so'ccupe de faire les conversions comme il faut.

    http://webman.developpez.com/article.../sqlparameter/

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Merci pour toutes vos réponses, je testerais ça demain au travail, car je n'ai pas les fichiers sur moi.

    Merci encore de votre aide!

  8. #8
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Citation Envoyé par Cardi
    Pour ce qui est d'insérer des paramètres dans un query, il est préférable d'utiliser les requêtes paramêtrées qui so'ccupe de faire les conversions comme il faut.

    http://webman.developpez.com/article.../sqlparameter/
    +1000

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Bonjour,

    J'ai essayé toutes les solutions que vous m'avez proposé, mais aucune ne fonctionne.

    Je me suis arrêtée sur la requête paramétrée. Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    String sqlInsertTransfstock =
           "INSERT INTO TRANSFSTOCK(TSDATE, TSTIME, ...)" +
           "VALUES(@zeDate,@zeHeure, ...) ";
     
            IDbCommand cmdTransfstock = connFirebird.CreateCommand();
     
            FbParameter paramDate = new FbParameter("@zeDate", FbDbType.Date);
            FbParameter paramHeure = new FbParameter("@zeHeure", FbDbType.Time);
     
            paramDate.Value = readerTransfstock["TSDATE"];
            paramHeure.Value = readerTransfstock["TSTIME"];
     
            cmdTransfstock.Parameters.Add(paramDate);
            cmdTransfstock.Parameters.Add(paramHeure);
     
            cmdTransfstock.CommandText = sqlInsertTransfstock;
            cmdTransfstock.ExecuteNonQuery();
    Et il me met comme message d'erreur : conversion error from string ""

    Je ne vois pas l'erreur que j'ai faites...

  10. #10
    Membre Expert

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Par défaut
    Sur le ExecuteQuery ?
    Dans ta proc stock, ton parametre zeDate, il est bien de type DateTime ?
    @date Datetime
    De plus, tu peux regrouper la date et l'heure.

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    En fait je récupère deux champs TSDATE et TSTIME d'une base de données SQL Server CE, qui sont des string. Et je veux les insérer dans une base de données Firebird ou il y a une colonne TSDATE (de type date), et une colonne TSTIME (de type time).

    Je ne sais pas si je suis très claire dans mes explications.

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Je sais pas si je vais etre assez clair, mais ton problème c'est juste une histoire
    de conversion de format... donc, si tu veux qu'on te fasse le code sans que
    tu te casses la tete, dis le... mais la , ca devient ubuesque

    D'un coté, tu as une chaine de caractere (une string)...

    T'as string à un format... donc, en faisant :

    Supposons que dans la variable merde tu as t'as TSDATE
    tu fais :
    string[] nlleDate= taDate.Split(new char[]{'\\'});

    maintenant, dans nlleDate tu as des 3 elements de ta date...

    Apres , tu fais je sais pas moi un truc du genre :

    string MaFireBirdDate = nlleDate[0] + ":::" + nlleDate[1] + ":::" + nlleDate[2];

    ou bien , tu as une Classe pour tes firebirdDate... et tu la rempli...

    Voila, j'pense qu'on pas plus t'aider que cela... sauf si on finit par te faire
    entierement ton code...

    Maintenant, on peut te faire tout ton code aussi...

    Perso, l'info, soit c une passion, soit on fait autre chose...

    The Monz, Toulouse

    PS : Excuse mon enervement, mais je suis en colère contre les gens qui pensent que programmer, ca s'apprend en 3 jours et qu'on peut etre bon
    sans etre passionner et en faire chez soit en dehors des cours
    Et faire de l'info sans en etre passionné, et beh... hallala, je m'emporte..
    désolé mais je suis un peu integriste sur les métiers du dev informatique...
    Soit on adore, soit on fait autre chose

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut piste
    j'ai un peu de mal à comprendre ton soucis mais d'après ce que j'ai compris
    voilà ce que tu peux faire:

    tu crées un objet date time avec le constructeur suivant:
    public DateTime (
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second
    )

    il faut donc que tu récupère tes valeurs pour les passer en parmètre dans le constructeur.
    pour récupérer chaque valeur(année, mois, jour, heure, minute, seconde)
    tu utilise la méthode split sur ton string d'origine (les séparateurs sont les espaces ou
    et ensuite tu converties chaque valeur en entier dans ta construction d'objet:
    datetime madate = new date time (Convert.ToInt16(stringAn),Convert.ToInt16(stringMois),Convert.ToInt16(stringJour),Convert.ToInt16(stringHeure),Convert.ToInt16(stringMinutes),Convert.ToInt16(stringSeconde)))

    ensuite pour passer ta valeur en parmètre vers le champ de type datetime tu envoies madate.value.

    en gros tu construis un objet date à partir de tes string et tu enverras ds ta base la propriété value de ton objet date .

    en espérant t'avoir aidée un peu et ne fais pas attention aux grincheux, on a tous débuté un jour et il est normal de poser des questions

    Nathalie

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 94
    Par défaut
    Merci de ta réponse!

    Cela marche enfin!

    Voilà mon code si ça peut aider quelqu'un qui a le même souci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    String date = DateTime.Parse(readerTransfstock["TSDATE"].ToString()).Year.ToString() + "-" + DateTime.Parse(readerTransfstock["TSDATE"].ToString()).Month.ToString() + "-" + DateTime.Parse(readerTransfstock["TSDATE"].ToString()).Day.ToString();
     
    String heure = DateTime.Parse(readerTransfstock["TSTIME"].ToString()).Hour.ToString() + ":" + DateTime.Parse(readerTransfstock["TSTIME"].ToString()).Minute.ToString() + ":" + DateTime.Parse(readerTransfstock["TSTIME"].ToString()).Second.ToString();
    Le format de la date insérée est donc yyyy-mm-dd mais sous Firebird il s'affiche dd/mm/yyyy.

    Merci encore de t'être penchée sur mon problème sans râler

  15. #15
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    si ta string est du format jj/mm/aaaa
    tu peux simplement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string s = "24/01/2007";
    			IFormatProvider f = new CultureInfo("fr-FR", true);
    			DateTime d = DateTime.Parse(s, f);
    			System.Diagnostics.Debug.WriteLine(d.ToString("yyyy-MM-dd"));

+ 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 string en date
    Par psycho_xn dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 19/06/2007, 23h24
  3. conversion UTC to date et heure
    Par tit_oune dans le forum C++
    Réponses: 6
    Dernier message: 23/06/2006, 21h01
  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