Sie müssen die ParseExact
Methode verwenden . Dies nimmt eine Zeichenfolge als zweites Argument, das das Format angibt, in dem die Datums- / Uhrzeitangabe vorliegt, zum Beispiel:
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);
}
Wenn der Benutzer ein Format in der Benutzeroberfläche angeben kann, müssen Sie dieses in eine Zeichenfolge übersetzen, die Sie an diese Methode übergeben können. Sie können das entweder tun es dem Benutzer ermöglicht , das Format - String direkt eingeben - auch wenn dies bedeutet , dass die Umwandlung wahrscheinlicher ist zum Scheitern verurteilt , da sie wird ein ungültiges Format Zeichenkette eingeben - oder ein Kombinationsfeld, die mit den möglichen Optionen präsentiert ihnen und du Richten Sie die Formatzeichenfolgen für diese Auswahl ein.
Wenn es wahrscheinlich ist, dass die Eingabe falsch ist (z. B. Benutzereingabe), ist es besser, sie zu verwenden TryParseExact
Ausnahmen als Ausnahmen zu verwenden, um den Fehlerfall zu behandeln:
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);
}
Eine bessere Alternative könnte darin bestehen , nicht den Benutzer mit einer Auswahl von Datumsformaten vorhanden, aber die Verwendung Überlastung , die ein Array von Formaten statt :
string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
"MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
"M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
"M/d/yyyy h:mm", "M/d/yyyy h:mm",
"MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
"MM/d/yyyy HH:mm:ss.ffffff" };
string dateString;
try
{
dateValue = DateTime.ParseExact(dateString, formats,
new CultureInfo("en-US"),
DateTimeStyles.None);
Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
}
catch (FormatException)
{
Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}
Wenn Sie die möglichen Formate aus einer Konfigurationsdatei oder Datenbank lesen, können Sie diese hinzufügen, wenn Sie auf die verschiedenen Arten der Eingabe von Datumsangaben stoßen.
TryParse
. Das istbool success = DateTime.TryParse(...);
.