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 :

Détecter la mise en forme de la date automatiquement


Sujet :

VB.NET

  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Détecter la mise en forme de la date automatiquement
    Bonjour,

    J'avais trouvé le moyen détecter automatiquement le formatage de la date en fonction du PC (enfin de sa nationalité).
    Mais impossible de retrouve mon bout de code.

    Mon but c'est d'imprimer un rapport d’analyse de mesure sur un champs solaire. L'utilisateur peut sélectionner la période mini maxi puis afficher le rapport.

    Suivant la version je souhaite donc que dans ce rapport, le mini et maxi soit dans le format correspondant à l’utilisateur.
    Par exemple pour un PC Français: 16/01/2012 08:10:15

    J'affiche les heures aussi.


    merci, si je retrouve ce code avant votre aide, je manquerais pas de vous le signaler.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Par défaut
    Je pense que ce n'est pas exactement cela que tu cherches...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MsgBox(DateNaissance.ToString("dddd d MMMM yyyy"))  => Dimanche 2 décembre 1951
     
     
    MsgBox(DateNaissance.ToString("dd/MM/yy")    =>  02/12/51 
     
     
    MsgBox(DateNaissance.ToString("hh:mm")   => 11:00

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bah c'est automatique... quand tu fais ToString() sur une date, elle est formatée selon les règles de la culture courante.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Par défaut
    Oui... moi j'ai toujours utilisé cette méthode.

  5. #5
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    En faite j'avais trouvé un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Frm As String
    Dim MaDate As string
     
     
    Frm =  "Paramètre du PC date"  'Ce qui me donnait le format de la date
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Frm = Frm & " hh:mm:ss" ' Pour ajouter l'heure
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaDate = Format(Now, Frm)
    Mais effectivement si .ToString suffit je vais pas m’embêter.


    Autre petite question sur les dates.

    J'ai un fichier enregistré en format type csv avec le ; de séparation.
    La 1ere colonne à ma date et heure la seconde ma donnée.

    Le format de la date est enregistré de cette façon suivi de la donnée:

    2011/09/22 13:21:01 ; 50.15

    Lorsque le l'ouvre sur mon PC en fr tout se passe bien il détecte bien que c'est une date et je peut ranger sa dans un dico.

    Par contre le même programme me plante sur un PC Anglais.

    Je suis en pleine investigation pour le moment, j'ai bien l'impression que c'est la date qui me plante, mais je n’écarte pas encore les données (avec point ou virgule).

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Par défaut
    Essaye une conversion de la date français vers anglais, peut être que ce lien pourras t'aider: http://msdn.microsoft.com/fr-fr/library/8kb3ddd4.aspx

  7. #7
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Alors la c'est a rien n'y comprendre

    Je vais pas vous passez mon code car vous aller avoir mal à la tête.
    Mon Fichier csv n'aillant pas été prévu pour pour faire des stat, mais uniquement de l'affichage de courbes. Il a fallu que je trouve des astuces pour concaténer plusieurs fichiers n'aillant pas forcement la même intervalle entre chaque mesure. et plusieurs autre souci.

    Quoi qu'il en soit, je ne comprend pas ce qu'il se passe.
    Mon fichier csv pour rappel est construis de la sorte:

    2011/09/22 13:21:01 ; 50.15

    Je stocke tout cela dans un dictionnaire avec la Key de format Date et la value de format double.

    Pour convertir mon String de lecture du fichier, j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Time As Date
     
    Time = Convert.ToDateTime(Tab(0)) 'Tab(0) étant le résultat un split de la ligne lu de mon csv.
    Time est donc stocker de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonDico1.add (Time, val(Tab(1))) 'Pour le double en (Tab(1)) c'est un peut plus complexe que sa mais la c'est pour faire simple.
    Ce dictionnaire je le mouline plusieurs fois, je le trie. Pour le mouliner et faire mon traitement je le copie dans d'autre dico du même format, pas de souci.
    Pour le traitement final je le stocke dans un Dictionnaire avec KeyValuePair pour ajouter un key numérique, me permettant de regarder ce qu'il y a avant et après la donnée en cours.

    Donc lors de mon traitement final j'ai un dico de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dictionnary(Of Long, KeyValuePair(Of Date, Double))
    Les données de ce dico sont parfaitement renseignées, mais lorsque je veux extraire la date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Dt1 As Date
    Dim Dt2 As Date
    Dim Dt3 As Date
     
    For Each nb As long In dico.keys
        '
        'J'ai des traitements avant
        'Je n'interroge pas la 1er de cette façon bien sur si non nb -1 plante 
        '
        Dt1 = Dico(nb -1).key    
        Dt2 = Dico(nb).key
        Dt3 = Dico(nb +1)
    next
    Donc la cela plante pourtant j’extraie une Date pour mettre dans une Date, il me dit que je n'est pas le bon format.

    Pour que cela marche je suis obligé une nouvelle fois de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Dt1 = Convert.ToDateTime(Dico(nb -1).key))
    Je n'arrive pas à comprendre pourquoi je suis obligé de faire un cast sur des variables de même type.

    Pour rappel aussi. Cela me plantait uniquement sur un PC US, cela marchait parfaitement sur mon PC FR.

  8. #8
    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
    Moi ce que je ne comprends, c'est comment cela pourrait-il fonctionner pour le premier et le dernier élément de ton tableau....

    Quand t'es au premier (disons que tu commences à 0), il va chercher la clef -1 dans ton dictionnaire mais ne va pas la trouver.

    Quand tu seras au dernier (disons n), il va chercher la clef n+1 et ne la trouvera pas non plus.

    L'erreur ne viendrait-elle pas plutot de là ?

  9. #9
    Membre extrêmement actif

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Par défaut
    As-tu essayé de convertir avec ToString(...) en fonction de la Culture de la machine (http://msdn.microsoft.com/en-us/libr...v=VS.100).aspx) ?

    Par exemple si quelq'un a décidé d'utilser des $ comme monnaie par défaut sur sa machine et le format de date francais comme date, ainsi tu pourra le savoir.

    Mais bon le mieux reste toujours d'enregistrer dans un et un seul format de date quel que soit le format de date de l'utilisateur.

  10. #10
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par griftou Voir le message
    Moi ce que je ne comprends, c'est comment cela pourrait-il fonctionner pour le premier et le dernier élément de ton tableau....

    Quand t'es au premier (disons que tu commences à 0), il va chercher la clef -1 dans ton dictionnaire mais ne va pas la trouver.

    Quand tu seras au dernier (disons n), il va chercher la clef n+1 et ne la trouvera pas non plus.

    L'erreur ne viendrait-elle pas plutot de là ?
    Je l'ai indiqué, je n'est pas afficher tout mon code, il va de soit que pour le 1 et le dernier je ne vais pas chercher respectivement le -1 et +1. N’étant pas le sujet je n'est pas tout afficher.
    De plus l'erreur ne serait pas une erreur de conversion de date, mais un dépassement d'index.

  11. #11
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par alex_vino Voir le message
    As-tu essayé de convertir avec ToString(...) en fonction de la Culture de la machine (http://msdn.microsoft.com/en-us/libr...v=VS.100).aspx) ?

    Par exemple si quelq'un a décidé d'utilser des $ comme monnaie par défaut sur sa machine et le format de date francais comme date, ainsi tu pourra le savoir.

    Mais bon le mieux reste toujours d'enregistrer dans un et un seul format de date quel que soit le format de date de l'utilisateur.
    Non je n'est pas encore essayé, la rustine que j'ai faite c'est a dire refaire un cast avec Convert.ToDateTime fonctionne. Vu que j'ai une présentation ce matin à effectuer. Pour le moment je n'y touche pas donc, je verra sa demain ou dans l'aprem.

    Par contre j'essaie d'enregistrer dans les fichiers toujours dans le même format c'est a dire 2011/09/22 13:21:01. Format japonais me dit mon collègue .

    Mais ce qu'il m’énerve c'est que l'extraction du fichier et l'exportation dans le dictionnaire se fait grâce à "Convert.ToDateTime" dans une vers une variable Date.
    Je fait plusieurs traitement sans souci dans des dico Dictionnary(Of Date, Double)) . Et pour mon dernier traitement, j'essaie juste d'extraire les Key du dico, vers des variables de type DATE, il en veux pas, obliger de faire un cast pour copier une variable de même type c'est étrange .

Discussions similaires

  1. mise en forme conditionnelle de date
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/04/2009, 12h07
  2. mise en forme conditionnelle par Date
    Par bibi28 dans le forum IHM
    Réponses: 10
    Dernier message: 24/08/2008, 16h17
  3. mise en forme conditionnelle avec date
    Par jeff192 dans le forum Excel
    Réponses: 1
    Dernier message: 20/03/2008, 16h08
  4. [Etat] Mise en forme en fonction date.
    Par GarsDuCalvados dans le forum IHM
    Réponses: 2
    Dernier message: 11/09/2007, 13h30
  5. [MySQL] Mise en forme de la date dans une ligne
    Par Donald08 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/08/2006, 13h28

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