Frage

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);

txtDatumDokum.Text ist wie „09.09.2011“.

aber ich erhalte den FormatException-Fehler.Muss ich das Datum analysieren?

War es hilfreich?

Lösung

Versuchen Sie es mit DateTime.Parseexact mit dem DD / MM / JJJJ Formatzeichenfolge

 DateTime.ParseExact(txtDatumDokum.Text, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);

Andere Tipps

Es ist nicht gut zu sehen, versuchen Sie es trotzdem:

string s = "09.09.2011";
DateTime dt = Convert.ToDateTime(
    s.Replace(".",
    new System.Globalization.DateTimeFormatInfo().DateSeparator));

Sie müssen es uns sagen Warum Die Texteingabe verwendet dieses Format.Wenn der Benutzer es auf diese Weise eingibt, müssen Sie sicherstellen, dass das Format mit dem von angegebenen übereinstimmt Thread.CurrentCulture.DateTimeFormat.ShortDatePattern.Veränderung der Kultur (durch Einstellung Thread.CurrentCulture) auf einen geeigneten Wert wird dann Ihr Problem lösen.

Wenn Sie die Eingabe analysieren sollen, egal in welchem ​​Format sie vorliegt, müssen Sie zuerst eine manuelle Verarbeitung durchführen (vielleicht Leerzeichen und andere Trennzeichen aus der Eingabe entfernen). string.Replace) und versuchen Sie dann, das Datum mit zu analysieren DateTime.ParseExact und eine bekannte Formatzeichenfolge.

Aber es hängt alles davon ab Warum Die Eingabe hat dieses Format und warum die aktuelle Kultur Ihrer Anwendung nicht damit übereinstimmt.

Sie könnten dies versuchen, TryParse vermeidet es, Ausnahmen zu analysieren. Dann müssen Sie nur ein Prüfungergebnis benötigen, um sicherzustellen, dass es analysiert wird.

DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, out datuMDokumenta);

Sie müssen feststellen, ob dies eine gute Lösung für Ihre Anwendung ist.

Siehe dieses Beispiel:http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx

Nach dem Datum zu urteilen, an dem Sie eine Kultur einfügen müssen, akzeptiert DE 01.01.11-Datumsangaben, aber ich bin mir nicht sicher, welches Sie tatsächlich verwenden möchten, müssen Sie entscheiden. Der Code würde aussehen so was:

using System.Globalization;

DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, CultureInfo.CreateSpecificCulture("de-DE"), DateTimeStyles.None, out datuMDokumenta);

Eine Liste von Kulturen finden Sie hier. Wählen Sie die für Sie geeignete Auswahl:http://msdn.microsoft.com/en-us/library/system.globalisierung.cultureInfo%28v=vs.71%29.aspx

Das Plus hier ist, dass dieser Code etwas mehr Arbeit ist, aber es ist sehr schwer zu brechen. Vorausgesetzt, Sie verwenden einen kostenlosen Texteintrag in einem Textfeld, möchten Sie keine Ausnahmen werfen.

Ja, Sie müssen das Eingabedatum in der aktuellen Kultur analysieren.

string[] format = new string[] { "dd.MM.yyyy" };
string value = "09.09.2011";
DateTime datetime;

if (DateTime.TryParseExact(value, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out datetime))
      //Valid
else
     //Invalid

Datetime dt = convert.todatetime (txtDatumdokum.text)

Es ist richtig ... es gibt keine Ausgabe

Während eines Deserialisierungsaufrufs unter kompaktem Framework 3.5 hatte ich zuvor ein unerwartetes Verhalten.

Ich habe die Verwendung der OpenNetCF -Serialisierungsklassen in die Framework XML -Serialisierungsklasse konvertiert. Dabei hat sich das Standardzeitformat und die Reihenfolge der Eigentums-/öffentlichen Mitglieder geändert. Kurz gesagt, ich habe eine Texteigenschaft enthüllt, die meine Datumszeit in das Format umwandelt, das meine VB6-Anwendung erwartet.

            Dim dumbDate As New Date
            Dim formats() As String = {"yyyy-MM-ddTHH:mm:ss.fffzzz", _
                                       "yyyy-MM-dd HH:mm:ss:fffffffzzz"}

            _datetimeTaken = dumbDate.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None)

            ' There is something wrong with compact framework during the Serialization calls. 
            ' calling the shared method Date.Parse or Date.ParseExact does not produce the same
            ' result as calling a share method on an instance of Date. WTF?!?!?!
            ' The below will cause a "Format" exception.
            '_datetimeTaken = Date.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None)

Date.blah funktioniert nicht. Dumbdate.blah Works. seltsam.

dein Code:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);

Versuchen Sie, dies zu ändern in:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum);

und wenn du das drucken date/time

datumdokumenta.text drucken

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top