5 Stimmen

Best practice beim Überprüfen, ob ein String ein Datum und eine Uhrzeit ist, bevor er konvertiert wird?

Was ist der beste Weg, es zu tun?

So mache ich es normalerweise:

DateTime newDate;

try
{
    newDate = DateTime.Parse(Textbox.Text);
}
catch
{
    //ist kein Datum
    return;
}

//etwas mit dem Datum machen

Aber irgendetwas sagt mir, dass das ein bisschen falsch ist. Irgendwelche Ideen?

11voto

Ahmad Mageed Punkte 91261

Verwenden Sie die DateTime.TryParse Methode anstatt eigene try/catch Blöcke zu verwenden.

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

if (DateTime.TryParse(text, out result))
{
    // Erfolg, result enthält den konvertierten Wert
}
else
{
    // Fehler
}

3voto

Binoj Antony Punkte 15610

Das beste Muster für das Analysieren von Datum und Uhrzeit wäre dieses

string DateFormat = "dd/MM/yyyy"; //Oder ein anderes Format
DateTime dateTime;
bool success = DateTime.TryParseExact(value, DateFormat, 
       CultureInfo.InvariantCulture, 
           DateTimeStyles.None, 
                out dateTime);

Verwenden Sie niemals DateTime.Parse oder DateTime.TryParse

2voto

Adriaan Stander Punkte 155899

Wenn Sie wissen, wie das Format des Datums und der Uhrzeit sein wird, können Sie auch die DateTime..::.TryParseExact-Methode verwenden

Das DateTime.TryParse kann Probleme verursachen, wenn es mit Daten wie 01/03/2009 verwendet wird

Ist es der 01. März oder der 03. Januar?

Ich würde empfehlen, dass Sie etwas anderes als ein Textfeld verwenden, wie z.B. einen Datumswähler, oder das Textfeld überprüfen, so dass Sie etwas wie dd MMM yyyy haben. Sehr selten würden Sie damit falsch liegen.

1voto

bniwredyc Punkte 8399

Kleine Ergänzung zu den vorherigen Antworten:

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 ist besser

Referenzen:

Reflector

1voto

Himadri Punkte 8042

Versuchen Sie folgendes:

DateTime todate;
if(!DateTime.TryParse("2009/31/01", todate))
{
//------------Konvertierung fehlgeschlagen-------------//
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X