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

ASP.NET Discussion :

Problème d'affichage de la date C#


Sujet :

ASP.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut Problème d'affichage de la date C#
    Bonjour,
    j'ai développé un intranet, sur l'une des pages j'affiche une gridview avec plusieurs données dont une date, seulement la date s'affiche de la manière suivante :

    Je ne sais pas à quoi c'est du et ce que j'aimerais c'est soit l'affiché au format dd/mm/yyyy ou dd/mm/yyyy hh24:mi:ss.
    D'une part, j'utilise sqldevelopper, dans ma table mon champs date est au format DATE.

    voici le code de ma requete d'insertion d'une part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "INSERT INTO matable (id,nom,type,dateprop,poste) 
    values (SEQOFFRE.nextval, '" + nomsociete + "','" + montype + "',TO_DATE('" + dateCandidature + "','DD-MM-YYYY'), '" + typeposte + "' )";
    Quand je fais mon select pour afficher les données dans ma gridview ,j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    string selectreq = "select nom,type,dateprop, poste from matable order by dateprop desc";
    j'ai beau changé la valeur, par exemple mettre DD/MM/YYYY ou DD/MM/YYYY hh24:mi:ss mais rien n'y fais ,il m'affiche toujours la date + heure 00:00:00 comment ça se fait ?
    J'ai essayé de mettre un to_date dans le select mais j'ai toujours l'affiche des 00:00:00, comment ça se fait ?

    Merci pour vos conseils !

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    pourquoi n'essaies-tu pas une fonction de formatage de date dans ta requête select ? (selon ton SGBD).
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Tu confond le format date d'oracle et de c#.

    pour faire le format que tu désires c'est : dd/MM/yyyy HH:mm:ss

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    Salut

    pourquoi n'essaies-tu pas une fonction de formatage de date dans ta requête select ? (selon ton SGBD).
    c'est a dire ? De faire un to_date dans mon select ? j'y ai deja pensé mais rien n'y fait :s


    pour faire le format que tu désires c'est : dd/MM/yyyy HH:mm:ss
    Justement j'ai essayé et il me fais la même chose, lors de l'insertion mais il me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01810: format code appears twice
    :s
    ->requete utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //pour l'insertion 
    "INSERT INTO matable (id,nom,type,dateprop,poste) 
    values (SEQOFFRE.nextval, '" + nomsociete + "','" + montype + "',TO_DATE('" + dateCandidature + "','dd/MM/yyyy HH:mm:ss'), '" + typeposte + "' )";
    je trouve ça bizarre pourtant ça devrait " couler de source" d'un côté j'enregistre la date et l'heure et quand je fais mon select il m'affiche justement la date :s Ce que je trouve étrange, c'est que j'essaye d'insérer avec l'heure mais dans sqldeveloper, il me l'enregistre que la date, donc dans mon select logique que seulement la date n'apparaisse :s

  5. #5
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    non, TO_DATE (comme son nom l'indique) fournit une date en sortie.
    Un exemple sous Oracle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_char(to_date('31/12/2015'), 'day DD month YY') from dual;
    (j'utilise un premier to_date pour avoir un vrai type datetime en paramètre de to_char)

    Ce qu'il faut savoir c'est que si ton champ est en datetime tu auras toujours un time (à 00:00:00 si non précisié), ensuite c'est l'interface (SQLDevelopper, appli WinForm, ASP.NET ...) qui va décider de comment l'afficher. A noter d'ailleurs qu'il me semble que .NET ne fait pas de distinction entre date et datetime, tu auras donc toujours une composante time. Dans ton cas le mieux serait de pouvoir faire sauter la partie qui t'embête au niveau de l'affichage, et non au niveau de la requête, mais je sais pas si ça peut se faire dans une GridView.
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Dans ton cas le mieux serait de pouvoir faire sauter la partie qui t'embête au niveau de l'affichage, et non au niveau de la requête, mais je sais pas si ça peut se faire dans une GridView.
    +1 tout ce qui est cosmétique (= affichage : format, couleur...) doit être fait au dernier moment, et surtout pas par le SGBDR qui n'est pas optimisé pour cela. Dans le code, que ce soit du C#, du Javascript, du SQL, etc. une date est une date avec une partie date et une partie "heure" et il ne doit pas en être autrement, sauf à vouloir se prendre le chou inutilement à manipuler les dates sous forme de string ou autre (sans compter les pertes de performance, etc.).

    Au niveau du GridView il est tout à fait possible de gérer le format d'affichage de la date mais comme on ne sait pas comment est géré l'affichage difficile d'aider...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Citation Envoyé par android59 Voir le message
    Salut


    c'est a dire ? De faire un to_date dans mon select ? j'y ai deja pensé mais rien n'y fait :s



    Justement j'ai essayé et il me fais la même chose, lors de l'insertion mais il me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01810: format code appears twice
    :s
    ->requete utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //pour l'insertion 
    "INSERT INTO matable (id,nom,type,dateprop,poste) 
    values (SEQOFFRE.nextval, '" + nomsociete + "','" + montype + "',TO_DATE('" + dateCandidature + "','dd/MM/yyyy HH:mm:ss'), '" + typeposte + "' )";
    je trouve ça bizarre pourtant ça devrait " couler de source" d'un côté j'enregistre la date et l'heure et quand je fais mon select il m'affiche justement la date :s Ce que je trouve étrange, c'est que j'essaye d'insérer avec l'heure mais dans sqldeveloper, il me l'enregistre que la date, donc dans mon select logique que seulement la date n'apparaisse :s
    Je parlais au niveau de l'affichage du gridview pas d'une requete SQL.
    Comme précisé par jopopmk et DotNetMatt c'est à l'affichage de tes données que tu dois gérer le format pas au niveau de la requête.

    Normalement dans ton gridview tu as une propriété de colonne qui s'appelle "dataformatstring" et dans celle-ci tu peux mettre le format que je t'avais donné.

    ex (date sans la partie time) :
    dataformatstring="{0:dd/MM/yyyy}"

    A+

  8. #8
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    ok merci pour vos conseils , j'ai donc tester avec la propriété DataFormatString="{0:f}" et j'obtiens ceci : mercredi 17 juin 2015 00:00 donc je vois à peu près ce que ça donne merci .

    Ce qu'il faut savoir c'est que si ton champ est en datetime tu auras toujours un time (à 00:00:00 si non précisié), ensuite c'est l'interface (SQLDevelopper, appli WinForm, ASP.NET ...) qui va décider de comment l'afficher. A noter d'ailleurs qu'il me semble que .NET ne fait pas de distinction entre date et datetime, tu auras donc toujours une composante time. Dans ton cas le mieux serait de pouvoir faire sauter la partie qui t'embête au niveau de l'affichage, et non au niveau de la requête, mais je sais pas si ça peut se faire dans une GridView.
    Donc en fait d'une part dans ma requete d'insertion, il est inutile de faire le to_date en fait si je comprends bien.

    PAr ailleurs, j'ai eu dans l'idée de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
                    DateTime madate = Convert.ToDateTime(txtdatecandidature.Text);
                    string dateCandidature = madate.ToString("dd/MM/yyyy HH:mm:ss")
                    //pour y insérer la date et l'heure mais l'affichage se fait pareil, quelques soit la propriété de  DataFormatString il me met toujours 00:00 pour l'heure,  pourtant si j'ai pas fais de betise, je me suis arrangé pour convertir la date pour l'y inséré , tout se passe bien mais pour l'affichage il ne m'affiche pas l'heure :s
    Pourtant j'aurais juré qu'en faisant ça je devrais pourtant l'avoir, même en affichant la date et l'heure dans mon gridview: s

  9. #9
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Pour ton problème initial Dokho1000 t'as donné la solution juste au-dessus (avec DataFormatString comme tu l'as vu).
    Citation Envoyé par android59 Voir le message
    Donc en fait d'une part dans ma requete d'insertion, il est inutile de faire le to_date en fait si je comprends bien.
    La fonction SQL TO_DATE va transformer la valeur en paramètre (de type VARCHAR) en valeur de type DATETIME (selon le format passé en second paramètre). Sachant que le champ dans lequel doit être inséré cette valeur est de type DateTime c'est pas complètement inutile, non. Il me semble qu'Oracle peut faire le cast en auto, mais tu pourrais avoir des soucis selon le NLS paramétré sur ton schéma. Par ailleurs tu pourrais utiliser des requêtes paramétrées, ainsi tu passerais un objet C# DateTime directement à la requête sans te soucier de son format (c'est ce qui est conseillé).

    Citation Envoyé par android59 Voir le message
    PAr ailleurs, j'ai eu dans l'idée de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
                    DateTime madate = Convert.ToDateTime(txtdatecandidature.Text);
                    string dateCandidature = madate.ToString("dd/MM/yyyy HH:mm:ss")
                    //pour y insérer la date et l'heure mais l'affichage se fait pareil, quelques soit la propriété de  DataFormatString il me met toujours 00:00 pour l'heure,  pourtant si j'ai pas fais de betise, je me suis arrangé pour convertir la date pour l'y inséré , tout se passe bien mais pour l'affichage il ne m'affiche pas l'heure :s
    Pourtant j'aurais juré qu'en faisant ça je devrais pourtant l'avoir, même en affichant la date et l'heure dans mon gridview: s
    Je suppose que ce code c'est pour l'exemple, parce que partir d'une string pour arriver à une string en double cast est un peu inutile
    Imagine que DateTime est une structure qui comprend un entier pour chaque composante (jour, mois, année, heure, minute et seconde).
    Si tu l'initialise avec une string du genre '31/12/2015' tu lui donnes les trois premières composantes (jour, mois et année), mais il ne connait pas les trois autres (heure, minute et seconde), du coup il garde les valeurs par défaut : 0
    Plus je connais de langages, plus j'aime le C.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Comme le dit jopopmk, passe par des paramètres pour les insert/updates/delete de cette façon tu es sûr de ne pas avoir de problème de conversion.

    A+

  11. #11
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    ok merci, je comprends un peu mieux je vais tester cela !

  12. #12
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Points : 493
    Points
    493
    Par défaut
    Bonjour

    Il est complètement absurde de concaténer des valeurs dans une chaîne de requête SQL, a plus forte raison avec des dates.

    Ecrire la requête sous forme paramétrique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MyTable(myColumn1, myColumn2) value(@MyValue, @AnotherValue)
    et passer les valeur des paramètres (l'association entre @MyValue et la valeur qu'on souhaite lui attribuer) à la commande, en instanciant un paramètre et en l'ajoutant à la collection de paramètres de la commande.

    Attention à un point : avec ODP, le binding des paramétrés est par défaut par ordre; il faut positionner la propriété BindByName de l'instance de commande à true pour avoir un binding par nom.
    Beaucoup trop d'hommes viennent au monde : l'Etat a été inventé pour ceux qui sont superflus. (Friedrich Nietzsche)

  13. #13
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2013
    Messages
    933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 933
    Points : 348
    Points
    348
    Par défaut
    c'est bon ça marche, merci à vous !!

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

Discussions similaires

  1. [AC-2013] Problème d'affichage de la date dans un formulaire
    Par rag83 dans le forum IHM
    Réponses: 26
    Dernier message: 20/11/2013, 15h36
  2. [WD16] Problème d'affichage de la date
    Par mubbes dans le forum WinDev
    Réponses: 2
    Dernier message: 06/03/2012, 12h42
  3. Problème d'affichage de la date
    Par sebasti1-88 dans le forum Débuter
    Réponses: 3
    Dernier message: 26/06/2011, 15h51
  4. Problème d'affichage de date sous access 2003
    Par FuNkY48 dans le forum Access
    Réponses: 7
    Dernier message: 11/12/2006, 15h04
  5. problème d'affichage de date
    Par Commodore dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 07/12/2005, 09h50

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