Konvertieren Sie das Datum vom Format MM / TT / JJJJ in das Format TT / MM / JJJJ

8

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.

    
ankur 06.10.2011, 12:40
quelle

5 Antworten

11

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 :

%Vor%

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 .

    
Jon Skeet 06.10.2011, 12:45
quelle
11

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:

%Vor%

Die Umkehrung gilt auch - wenn Sie die Zeichenfolge eindeutig analysieren müssen, verwenden Sie ParseExact oder TryParseExact (beide statische Mitglieder von DateTime ):

%Vor%

Lesen Sie mehr über benutzerdefinierte und Standard Datum und Uhrzeit Formatstrings.

    
Oded 06.10.2011 12:43
quelle
2

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.

    
JMax 06.10.2011 12:45
quelle
-1

Probieren Sie DateTime.Parse mit einem geeigneten Formatanbieter aus. In Ihrem Fall sollte es

sein %Vor%     
PVitt 06.10.2011 12:45
quelle
-1

Wenn Sie in einem bestimmten Format darauf zugreifen möchten, sollten Sie DateTime.ToString (string format) verwenden.

Ссылка

    
kmkemp 06.10.2011 12:46
quelle