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 :

DateTime.Parse() et format personnalisé [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je tente d'interpréter une date au format yyyyMMdd (20111125 pour aujourd'hui) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CultureInfo ci = CultureInfo.CreateSpecificCulture("fr-fr");
    ci.DateTimeFormat.ShortDatePattern =  "yyyyMMdd";
    ci.DateTimeFormat.FullDateTimePattern =  "yyyyMMdd";
    ci.DateTimeFormat.LongDatePattern =  "yyyyMMdd";
    tmp = DateTime.Parse(v, ci);
    J'obtiens une erreur comme quoi la date n'est pas reconnue.
    Pourtant, je passe "20111125".
    Comment lui faire comprendre que je lui passe une shortdate ?

    J'ai besoin d'un truc générique, qui puisse se baser sur un pattern pour interpréter la date.

  2. #2
    Membre confirmé Avatar de istace.emmanuel
    Homme Profil pro
    Senior Full-Stack .Net Developer
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Full-Stack .Net Developer
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Par défaut
    Ceci marche chez moi ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                //Parse avec un regex
                Match match = Regex.Match("20111125", @"([0-9]{4})([0-9]{2})([0-9]{2})", RegexOptions.IgnoreCase);
     
                // Si match et 3 groupes + original
                if (match.Success && match.Groups.Count <= 4)
                {
                    DateTime dt = new DateTime(int.Parse(match.Groups[1].Value), int.Parse(match.Groups[2].Value), int.Parse(match.Groups[3].Value));
                    Console.WriteLine(dt.ToString("yyyy-mm-dd"));
                }
                Console.ReadKey();

  3. #3
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Regarde la méthode DateTime.ParseExact
    http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    où sinon une méthode d'extension qui se base sur le shortdatepattern

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
      public static DateTime ParseDate(this DateTime dateTime, string date, IFormatProvider provider)
            {
                DateTime dateFormat = new DateTime();
     
                DateTimeFormatInfo dateInfo = provider.GetFormat(typeof(DateTimeFormatInfo)) as DateTimeFormatInfo;
                if (dateInfo != null)
                {
                    string pattern = dateInfo.ShortDatePattern;
                    List<int> listYear = pattern.Select((c, i) => i).Where((c, i) => pattern[i] == 'y').ToList();
                    List<int> listMonth = pattern.Select((c, i) => i).Where((c, i) => pattern[i] == 'M').ToList();
                    List<int> listDay = pattern.Select((c, i) => i).Where((c, i) => pattern[i] == 'd').ToList();
     
     
                    int year = 0;
                    int month = 0;
                    int day = 0;
                    for (int i = 0; i < listYear.Count; i++)
                    {
                        year += (int)(int.Parse(date[listYear[i]].ToString()) * Math.Pow(10, listYear.Count - 1 - i));
                    }
                    for (int i = 0; i < listMonth.Count; i++)
                    {
                        month += (int)(int.Parse(date[listMonth[i]].ToString()) * Math.Pow(10, listMonth.Count - 1 - i));
                    }
                    for (int i = 0; i < listDay.Count; i++)
                    {
                        day += (int)(int.Parse(date[listDay[i]].ToString()) * Math.Pow(10, listDay.Count - 1 - i));
                    }
                    dateFormat = new DateTime(year, month, day);
     
                }
     
                return dateFormat;
            }

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par meziantou Voir le message
    Regarde la méthode DateTime.ParseExact
    http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx
    Merci, ça marche parfaitement

    Pas bien compris pourquoi pourquoi ça marchait pas avec Parse tout court mais bon... D'autant que pour decimal, le parse marche très bien en modifiant la culture en paramètre

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

Discussions similaires

  1. Format personnalisé datetime dans proc gplot
    Par pgrandel dans le forum Macro
    Réponses: 6
    Dernier message: 10/02/2011, 14h24
  2. PaperSize = xlPaperUser (définir un format personnalisé ?)
    Par greg778 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/01/2008, 14h22
  3. Utiliser un Formater personnalisé
    Par seareal dans le forum Struts 1
    Réponses: 1
    Dernier message: 13/12/2007, 16h46
  4. Réponses: 7
    Dernier message: 26/05/2006, 19h45
  5. Réponses: 9
    Dernier message: 21/04/2006, 16h24

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