Ich stehe vor einem kleinen Problem, das ich nicht kann, nachdem ich so viele Dinge versucht habe, also hier geht es ..... Es gibt ein Textfeld auf meiner Seite, in das ich Datum eintrage, und ich möchte dieses Datum in einer Datetime Objekt.
für ex: eingegebenes Datum: 11/2/2010 (TT / MM / JJJJ) sollte im selben Format sein, wenn ich darauf im Datum-Zeit-Objekt zugreife, aber es wird geändert (2/11/2011 dh: MM / TT / JJJJ-Format) .
Ich hoffe, ich mache hier Sinn, alles was ich will, ist eine Sache wie diese .....
%Vor%dt sollte (11.2.2010 statt dann 11.11.2010)
sein@oded nach Verwendung des folgenden Codes
%Vor%// Um Daten für unsere Verwendung zu ändern. DateTime.TryParseExact (txtFrom.Text, "TT / MM / JJJJ", CultureInfo.InvariantCulture, DateTimeStyles.None, out sDate);
%Vor%Was ich in edate und sdate bekomme, ist 1/1/0001 12:00:00 AM, wo es 3/11/2011 sein sollte.
EDIT: Dieser Wert: "11/2/2010" stimmt nicht mit dem Format "TT / MM / JJJJ" überein. Es entspricht dem Format "d / M / yyyy" - für "dd / MM / yyyy" sollte es "11/02/2010" sein.
Deshalb ist TryParseExact
für Sie fehlgeschlagen. Sie müssen das richtige Formatmuster auswählen.
A DateTime
value hat kein Format . Es stellt nur Datum und Uhrzeit dar (im ISO-Kalender und möglicherweise in verschiedenen Zeitzonen, aber das ist eine andere Sache). Es ist wie ein int
- es stellt nicht "eine dezimale ganze Zahl" oder "eine hex ganze Zahl" dar - es ist gerade eine Ganzzahl innerhalb eines bestimmten Bereiches. Sie können formatieren eine Zahl als Dezimal oder Hexadezimal, aber es hat nicht von Natur aus ein Format.
Es klingt, als sollten Sie es mit ParseExact
parsen, um das Format anzugeben, wenn von in das Textfeld konvertiert wird, oder wahrscheinlich TryParseExact
:
Sie sollten diesen Wert als DateTime
für alle Zwecke beibehalten außer geben Sie ihn an einen Benutzer zurück - an diesem Punkt möchten Sie vielleicht ihre kulturellen Einstellungen verwenden.
Insbesondere, wenn Sie den Wert in einer Datenbank speichern, sollten Sie ihn nicht in Text umwandeln und ihn in eine SQL-Anweisung einfügen - das bedeutet Ärger. Verwenden Sie stattdessen eine parametrisierte SQL-Anweisung und legen Sie sie als Parameterwert fest, immer noch als DateTime
.
DateTime
speichert keine Daten in einem bestimmten Format - es verwendet eine interne Repräsentation (was genau nicht wichtig ist).
Nach dem Parsen der Zeichenfolge zu DateTime
gibt es dort kein inhärentes Format. Es gibt nur ein Format, wenn Sie den Wert ausgeben . Was Sie im Debugger sehen, ist einfach eine Umwandlung in eine Zeichenkette mit Ihren Systemeinstellungen.
Wenn Sie DateTime
formatieren möchten, verwenden Sie ToString
mit einer Formatzeichenfolge:
Die Umkehrung gilt auch - wenn Sie die Zeichenfolge eindeutig analysieren müssen, verwenden Sie ParseExact
oder TryParseExact
(beide statische Mitglieder von DateTime
):
Lesen Sie mehr über benutzerdefinierte und Standard Datum und Uhrzeit Formatstrings.
Um einen Fehler in Monaten / Tagen beim Parsing eines Datums zu vermeiden, ist es wahrscheinlich besser, zu verwenden DateTime.Parse oder DateTime.ParseExact als ToDateTime
.
Als dieser Thread und dieser Artikel wies darauf hin.
Tags und Links c# datetime asp.net datetime-format