124 votes

Valider un DateTime en C#

Je doute que je suis le seul qui est venu avec cette solution, mais si vous avez une meilleure une, merci de le poster ici. Je veux simplement laisser cette question ici, donc moi et les autres peuvent le rechercher plus tard.

J'avais besoin de savoir si une date valide a été entré dans une zone de texte et c'est le code que j'ai trouvé. J'ai le feu cette fois la mise au point des feuilles de la zone de texte.

try
{
    DateTime.Parse(startDateTextBox.Text);
}
catch
{
    startDateTextBox.Text = DateTime.Today.ToShortDateString();
}

277voto

qui Points 5259

DateTime.TryParse Ce que je crois est plus rapide et cela signifie que vous n'avez pas à utiliser laid essayer/captures :)

e.g

DateTime temp;
if(DateTime.TryParse(startDateTextBox.Text, out temp))
//yay
else
// :(

62voto

Jon Skeet Points 692016

Ne pas utiliser les exceptions pour le contrôle de flux. Utiliser DateTime.TryParse et DateTime.TryParseExact. Personnellement, je préfère TryParseExact avec un format spécifique, mais je suppose qu'il ya des moments où TryParse est mieux. Exemple d'utilisation basé sur l'original de votre code:

DateTime value;
if (!DateTime.TryParse(startDateTextBox.Text, out value))
{
    startDateTextox.Text = DateTime.Today.ToShortDateString();
}

Des raisons de préférer cette approche:

  • Le code plus clair (il dit ce qu'il veut faire)
  • De meilleures performances que de l'attraper et de la déglutition exceptions
  • Cela ne veut pas attraper les exceptions de manière inappropriée - par exemple OutOfMemoryException, ThreadInterruptedException. (Votre code actuel pourrait être fixé pour éviter ce par juste attraper l'exception, mais à l'aide de TryParse serait encore mieux).

25voto

Brendan Conrad Points 21

Voici une autre variante de la solution qui renvoie true si la chaîne peut être converti en type DateTime, et false sinon.

public static bool IsDateTime(string txtDate)
{
    DateTime tempDate;

    return DateTime.TryParse(txtDate, out tempDate) ? true : false;
}

4voto

Alex Fort Points 9961

Je voudrais utiliser le DateTime.TryParse() la méthode: http://msdn.microsoft.com/en-us/library/system.datetime.tryparse.aspx

3voto

shapr Points 1252

Que penser de l'utilisation TryParse?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X