2009-10-16 4 views

risposta

11

Utilizzare il metodo DateTime.TryParse anziché utilizzare i propri blocchi try/catch.

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

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

Grazie. Per interesse, qual è la differenza? – John

+2

@John: la differenza è TryParse restituirà un valore booleano per indicare se il testo specificato è stato in grado di essere convertito in una data correttamente, piuttosto che generare un'eccezione se fallisce. L'uso di Parse genera un oggetto FormatException, motivo per cui è necessario utilizzare un try/catch con esso. –

+0

Come ulteriore nota, tutti i tipi di BCL che forniscono un metodo 'Parse' forniscono anche un metodo' TryParse'. –

2

Se si sa quale sarà il formato del datetime, è anche possibile utilizzare DateTime..::.TryParseExact Method

Il DateTime.TryParse può causare problemi quando viene utilizzato con date quali 01/03/2009

È il 01 mar o il 03 gen?

Vorrei piuttosto raccomandare che si utilizzi qualcosa di diverso da una casella di testo, come un selettore di date, o di convalidare la casella di testo in modo da avere qualcosa come gg MMM yyyy. molto raramente ti sbagliare.

1

piccola aggiunta alle risposte precedenti:

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 è meglio

Riferimenti:

Reflector

1

provare quanto segue:

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

Il miglior modello da utilizzare per datetime analisi sarebbe questa

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

Non usare mai DateTime.Parse e anche DateTime.TryParse

Problemi correlati