Konvertieren einer Zeichenkette in eine Datumszeit

Ich entwickle eine "asp.net"-Seite unter Verwendung von "vb" Framework 3.5.

Ich habe Schwierigkeiten bei der Konvertierung von String-Daten in Datum Ich habe versucht, die Funktion cdate zu verwenden,

Ich habe eine Variable sdate, die eine String-Variable ist und in der das Datum gespeichert ist, das aus der Textbox als dd/mm/yyyy kommt. Jetzt möchte ich diesen String in eine Datumsvariable konvertieren, da ich die Operationen wie Addieren eines Tages oder Subtrahieren eines Tages durchführen muss.

Ich erhalte die Fehlermeldung in Zeile 3: "String wurde nicht als gültige DateTime erkannt". Ich habe versucht, wie folgt zu tun, aber der Fehler kommt

Dim sdate As String 
Dim expenddt As Date
expenddt = Date.Parse(edate)
expenddt = expenddt.AddDays(-1)

Aber ich erhalte den Fehler als

Die Konvertierung von String in den Typ Datum ist nicht gültig.

Wie kann ich ein "Datum" aus der Zeichenkette erhalten?

Lösung

Sie sollten Date.ParseExact oder Date.TryParseExact mit dem richtigen Formatstring verwenden.

 Dim edate = "10/12/2009"
 Dim expenddt As Date = Date.ParseExact(edate, "dd/MM/yyyy", 
            System.Globalization.DateTimeFormatInfo.InvariantInfo)

OR

 Dim format() = {"dd/MM/yyyy", "d/M/yyyy", "dd-MM-yyyy"}
 Dim expenddt As Date = Date.ParseExact(edate, format,  
     System.Globalization.DateTimeFormatInfo.InvariantInfo, 
     Globalization.DateTimeStyles.None)

ODER

Dim format() = {"dd/MM/yyyy", "d/M/yyyy", "dd-MM-yyyy"}
Dim expenddt As Date
Date.TryParseExact(edate, format, 
    System.Globalization.DateTimeFormatInfo.InvariantInfo, 
    Globalization.DateTimeStyles.None, expenddt)
Kommentare (2)

Versuchen Sie, die Methode DateTime.ParseExact zu verwenden, bei der Sie sowohl die Datetime-Maske als auch die geparste Originalzeichenkette angeben können. Sie können hier darüber lesen: MSDN: DateTime.ParseExact

Kommentare (3)

Versuchen Sie, das Datum wie folgt umzurechnen:

    Dim expenddt as Date = Date.ParseExact(edate, "dd/mm/yyyy", 
System.Globalization.DateTimeFormatInfo.InvariantInfo);

Ich hoffe, das hilft.

Kommentare (1)