2016-06-16 20 views
1

Ich analysiere Datum vom Server, Datum ist in diesem Format 6/16/2016 3:15:29 PM Konnten Sie mir bitte helfen, Datum in 2016-06-16 umzuwandeln?Konvertieren String in DateTime (JJJJ-MM-TT)

Ich habe versucht:

DateTime date = DateTime.ParseExact(datestring, "MM/dd/yyyy h-m-s t", System.Globalization.CultureInfo.InvariantCulture); 
string formattedDate = date.ToString("yyyy-MM-dd") 

aber es gibt mir Fehler.

+3

berücksichtigen Das Zeittrennzeichen in der Eingabezeichenfolge ist ein Doppelpunkt. – Steve

+0

versuchen Sie dies "MM/TT/JJJJ H: M: S t" – riteshmeher

+0

Teilen Sie den Fehler, den Sie bekommen. Ich vermute, dass die Verwendung von '-' als Zeittrennzeichen Teil Ihres Problems ist. – jwpfox

Antwort

5

Sie haben 3 Probleme bekam

  • Sie sind nicht die richtige Zeit Separatoren
  • Sie sind nur ein t verwenden, wenn Sie benötigen zwei
  • Sie verwenden zwei M, wenn Sie brauchen nur ein

Versuchen

DateTime date = DateTime.ParseExact(datestring, "M/d/yyyy h:m:s tt", System.Globalization.CultureInfo.InvariantCulture); 
string formattedDate = date.ToString("yyyy-MM-dd"); 

Der Grund, warum Sie nur eine M benötigen, ist, weil MM eine führende Null erwartet. Da die Werte für Datum und Uhrzeit getrennt sind, sollten Sie die einzelnen Versionen für Monat, Tag, Minuten und Sekunden verwenden, da sie für Werte mit oder ohne führende Nullen funktionieren.

+0

Da es "h-m-s" in der Frage ist, sollten Sie wahrscheinlich nicht das Format für steifere ändern ('h: mm: ss'), die * führenden Nullen für Minuten und Sekunden –

+0

Es funktioniert. Danke vielmals. –

+0

@DmitryBychenko Ich habe einen Kommentar dazu hinzugefügt. Das gegebene Beispiel führt uns nicht wirklich dazu, zu wissen, ob es führende Nullen für diese gibt oder nicht. Aber wenn dann die Singles nicht funktionieren, liegt es an dem OP, zu entscheiden, welches korrekt ist. Haben Sie nicht auch dasselbe getan, indem Sie ein einzelnes "d" verwendet haben, als das Beispiel zwei hatte? – juharr

0

Zur Ausführung DateTime.ParseExact() Format der Eingabe-Zeichenfolge und die Format-Zeichenfolge muss identisch sein. versuchen Sie dies:

DateTime date = DateTime.ParseExact(datestring, "M/dd/yyyy h:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture); 
string formattedDate = date.ToString("yyyy-MM-dd"); 

Diese in der gegebenen Eingabestring interessant sind (6/16/2016 3:15:29 PM):

  1. Der Monat in einstelliger dargestellt wird, so dass es M statt für MM sein sollte. Wir verwenden MM, wenn es als 06 angegeben ist.
  2. Gleiche im Fall von Stunden auch. Es sollte h stattdessen für normales hh sein
  3. Es gibt ein einzelnes Leerzeichen zwischen Datum und Uhrzeit sowie Zeit und . Also müssen wir alle diese beim Generieren der Format-Zeichenfolge für ParseExact