Ich versuche, meinen mit Zeichenfolgen formatierten Wert in den Datumstyp mit Format zu konvertieren dd/MM/yyyy
.
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
Was ist das Problem ? Es hat eine zweite Überschreibung, die verlangt IFormatProvider
. Was ist das? Muss ich das auch bestehen? Wenn ja, wie wird es für diesen Fall verwendet?
Bearbeiten
Was sind die Unterschiede zwischen Parse
und ParseExact
?
Bearbeiten 2
Beide Antworten von Slaks und Sam arbeiten für mich, derzeit gibt der Benutzer die Eingabe, aber dies wird von mir versichert, dass sie mithilfe von maskTextbox gültig sind.
Welche Antwort ist besser, wenn Sie alle Aspekte wie Typensicherheit, Leistung oder etwas berücksichtigen, nach dem Sie sich fühlen
Antworten:
Verwenden Sie
DateTime.ParseExact
.quelle
dd/MM/yyyy
so, dass eine Textzeichenfolge mit einer Zeit darin nicht richtig analysiert wird. Sie müssen entweder die Zeit entfernen oder sie in das Formatmuster aufnehmen. Es gibt eine ÜberladungParseExact
, die ein Array von Formatmustern akzeptiert und den Text analysiert, wenn er mit einem von ihnen übereinstimmt.CultureInfo.InvariantCulture
anstelle des aktuellen, wenn Sie trotzdem ein Format definieren?Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
Sie es , es wird Ihre Lösung brechen. Um dies zu beheben, verwenden Sie"dd'/'MM'/'yyyy"
(Schutz der Schrägstriche mit einfachen Anführungszeichen) oder@"dd\/MM\/yyyy"
("Entkommen" der Schrägstriche mit umgekehrten Schrägstrichen).Sie müssen anrufen
ParseExact
, um ein Datum zu analysieren, das genau einem von Ihnen angegebenen Format entspricht.Beispielsweise:
Der
IFormatProvider
Parameter gibt die Kultur an, die zum Analysieren des Datums verwendet werden soll.Sofern Ihre Zeichenfolge nicht vom Benutzer stammt, sollten Sie übergeben
CultureInfo.InvariantCulture
.Wenn die Zeichenfolge vom Benutzer stammt, sollten Sie übergeben
CultureInfo.CurrentCulture
, wodurch die Einstellungen verwendet werden, die der Benutzer in den regionalen Optionen in der Systemsteuerung angegeben hat.quelle
using System.Globalization;
Das Parsen einer Zeichenfolgendarstellung einer DateTime ist eine schwierige Sache, da verschiedene Kulturen unterschiedliche Datumsformate haben. .Net kennt diese Datumsformate und bezieht sie
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat
beim Aufruf aus Ihrer aktuellen Kultur ( )DateTime.Parse(this.Text)
.Beispielsweise stimmt die Zeichenfolge "22/11/2009" nicht mit dem ShortDatePattern für die USA (en-US) überein, sondern mit Frankreich (fr-FR).
Jetzt können Sie entweder die
DateTime.ParseExact
erwartete Formatzeichenfolge aufrufen und übergeben, oder Sie können eine geeignete Kultur übergeben,DateTime.Parse
um das Datum zu analysieren.Dies analysiert beispielsweise Ihr Datum korrekt:
Natürlich sollten Sie Frankreich nicht zufällig auswählen, sondern etwas, das Ihren Bedürfnissen entspricht.
Was Sie herausfinden müssen, ist, was
System.Threading.Thread.CurrentThread.CurrentCulture
eingestellt ist und ob / warum es von Ihren Erwartungen abweicht.quelle
Obwohl die oben genannten Lösungen effektiv sind, können Sie die webconfig-Datei auch wie folgt ändern:
Ref: Datetime-Format auf lokaler Maschine anders als auf Produktionsmaschine
quelle
Möglicherweise müssen Sie die Kultur für dieses bestimmte Datumsformat wie folgt angeben:
Weitere Details finden Sie hier:
http://msdn.microsoft.com/en-us/library/5hh873ya.aspx
quelle
Nachdem ich viel Zeit verbracht habe, habe ich das Problem gelöst
quelle
Verwenden Sie diese Option, um eine Zeichenfolge in datetime zu konvertieren:
quelle
Basierend auf dieser Referenz hat der nächste Ansatz für mich funktioniert:
quelle
quelle
Wie oben bereits erwähnt, können Sie es als Zeichenfolgenparameter senden, es muss jedoch das folgende Format haben: '20130121', und Sie können es in dieses Format konvertieren, indem Sie es direkt vom Steuerelement übernehmen. So erhalten Sie es zum Beispiel aus einem Textfeld wie:
um es zu konvertieren in: '20130121' verwenden Sie:
damit SQL es konvertieren und in Ihre Datenbank einfügen kann.
quelle
Sie können auch verwenden
quelle
Arbeitete für mich unter Code:
Namespace
quelle
Manuell ändern:
Ab dem 22.11.2015 wird es am 22.11.2015 umgebaut
quelle