2013-06-05 6 views
1

Lorsque j'essaie de convertir le DateTime dans un format spécifique, j'obtiens cette erreur.La chaîne n'a pas été reconnue en tant que DateTime valide dans ParseExact

DateTime.Now= 6/5/2013 2:29:21 PM 

DateTime.ParseExact(CStr(DateTime.Now), "MM/dd/yyyy", CultureInfo.CurrentCulture) 

Erreur:

String was not recognized as a valid DateTime 

Pourquoi je suis obtenir cela? En plus du fait que vous convertissez un DateTime en une chaîne puis de nouveau, le format DateTime ne correspond pas exactement à

+0

Quelle culture est-il? Essayez d'examiner 'CultureInfo.CurrentCulture' et de voir ce qu'il dit. –

+1

Question rhétorique: est le premier argument dans le même format ** exact ** que votre chaîne de format? Avez-vous lu la [documentation] (http://msdn.microsoft.com/fr-fr/library/w2sa9yss.aspx)? – Jon

+0

Aussi, * pourquoi * faites-vous cela? Pourquoi ne pas simplement 'DateTime.Today'? Cela n'a pas beaucoup de sens de prendre un 'DateTime', de le convertir en une chaîne, et de l'analyser ensuite en' DateTime'. –

Répondre

7

DateTime.ParseExact analyse une chaîne dans un objet DateTime et le format que vous lui donnez doit correspondre à exactement. Vous avez dit que DateTime.Now apparaît comme 6/5/2013 2:29:21 PM, pour lequel le format correct est M/d/yyyy h:mm:ss tt. Vérifiez MSDN pour plus d'informations sur les formats de date personnalisés.

Je vais sortir sur un membre et dire que, en regardant votre code, je pense que vous essayez de formater la date à juste la date, ce qui peut être réalisé en utilisant la méthode ToString sur DateTime:

string todaysDate = DateTime.Now.ToString("MM/dd/yyyy"); // todaysDate will contain "06/05/2013" 
+0

J'aurais dû l'utiliser. Merci. Mais ce n'est pas connu de beaucoup de gens ici. – iamCR

+0

Aucun problème du tout =] – Sean

+0

Mais pourquoi cela ne jette pas l'exception? DateTime.Now.ToString ("MM/jj/aaaa"); – iamCR

1

Notez la partie de la méthode nommée exacte, vous donnez une chaîne contenant un temps, et ne précise pas comment analyser le temps, de sorte que l'analyse syntaxique échouera.

Essayez ceci:

DateTime.ParseExact(str, "M/d/yyyy h:mm:ss tt", CultureInfo.CurrentCulture) 

programme Exemple LINQPad:

void Main() 
{ 
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US"); 

    string str = "6/5/2013 2:29:21 PM"; 

    DateTime.ParseExact(str, "M/d/yyyy h:mm:ss tt", CultureInfo.CurrentCulture).Dump(); 
} 

Sortie:

6/5/2013 2:29:21 PM 
2

6/5/2013 2:29:21 PM n'est pas la même chose que MM/dd/yyyy.
Alors, bien sûr, l'analyse échoue. De vos commentaires, il semble que vous testiez vraiment la chaîne de format, et vous ne vous souciez pas de la valeur de la date. Alors pourquoi ne pas simplement coder votre date dans le format que vous voulez vraiment:

String userInput = "MM/dd/yyyy"; 
DateTime.ParseExact("11/11/2011", userInput, CultureInfo.CurrentCulture) 
Questions connexes