È necessario utilizzare ParseExact
method. Questo richiede una stringa come secondo argomento che specifica il formato datetime è, per esempio:
// Parse date and time with custom specifier.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
try
{
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
Console.WriteLine("{0} is not in the correct format.", dateString);
}
Se l'utente può specificare un formato nell'interfaccia utente, allora avete bisogno di tradurre che in una stringa si può passare in questo metodo. Puoi farlo sia consentendo all'utente di immettere direttamente la stringa di formato, anche se questo significa che la conversione ha più probabilità di fallire in quanto corrisponderà a immettendo una stringa di formato non valida o avendo una casella combinata che li presenta con le possibili scelte e tu imposti le stringhe di formato per queste scelte.
Se è probabile che l'ingresso non sarà corretto (input dell'utente, per esempio), sarebbe meglio usare TryParseExact
piuttosto che le eccezioni per gestire il caso di errore:
// Parse date and time with custom specifier.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
DateTime result;
if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out result))
{
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
else
{
Console.WriteLine("{0} is not in the correct format.", dateString);
}
Tra l'altro, è possibile determinare se la conversione non è riuscita controllando il valore di ritorno del 'TryParse'. Questo è 'bool success = DateTime.TryParse (...);'. –