2009-10-16 15 views

Répondre

11

Utilisez la méthode DateTime.TryParse au lieu d'utiliser vos propres blocs try/catch.

string text = "10/16/2009"; 
DateTime result; 

if (DateTime.TryParse(text, out result)) 
{ 
    // success, result holds converted value 
} 
else 
{ 
    // failed 
} 
+0

Merci. Par intérêt, quelle est la différence? – John

+2

@John: la différence est que TryParse retournera un booléen pour indiquer si le texte donné a pu être converti en date avec succès, plutôt que de lancer une exception s'il échoue. Utiliser Parse lève une exception FormatException, c'est pourquoi vous devriez utiliser un try/catch avec elle. –

+0

En outre, tous les types BCL qui fournissent une méthode 'Parse' fournissent également une méthode' TryParse'. –

2

Si vous savez ce que le format de la datetime sera, vous pouvez également utiliser DateTime..::.TryParseExact Method

Le DateTime.TryParse peut causer des problèmes lorsqu'il est utilisé avec des dates telles que 01/03/2009

Est-il 01 Mars ou 03 Jan? Je préférerais que vous utilisiez autre chose qu'une zone de texte, comme un sélecteur de date, ou que vous validiez la zone de texte pour avoir quelque chose comme dd MMM yyyy. très rarement vous iriez mal avec cela.

1

peu plus des réponses précédentes:

DateTime:

public static DateTime Parse(string s) 
{ 
    return DateTimeParse.Parse(s, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None); 
} 

public static bool TryParse(string s, out DateTime result) 
{ 
    return DateTimeParse.TryParse(s, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None, out result); 
} 

DateTimeParse:

internal static DateTime Parse(string s, DateTimeFormatInfo dtfi, DateTimeStyles styles) 
{ 
    DateTimeResult result = new DateTimeResult(); 
    result.Init(); 
    if (!TryParse(s, dtfi, styles, ref result)) 
    { 
     throw GetDateTimeParseException(ref result); 
    } 
    return result.parsedDate; 
} 

TryParse est mieux

Références:

Reflector

1

les opérations suivantes:

DateTime todate; 
if(!DateTime.TryParse("2009/31/01", todate)) 
{ 
//------------conversion failed-------------// 
} 
2

Le meilleur modèle à utiliser pour l'analyse syntaxique datetime ne serait-ce

string DateFormat = "dd/MM/yyyy"; //Or any other format 
DateTime dateTime; 
bool success = DateTime.TryParseExact(value, DateFormat, 
     CultureInfo.InvariantCulture, 
      DateTimeStyles.None, 
       out dateTime); 

Ne jamais utiliser DateTime.Parse et même DateTime.TryParse

Questions connexes