2012-04-12 14 views
3

Ich versuche Zeichenfolge datetime zu konvertieren, aber jedes Mal, wenn ich:Zeichenfolge wurde nicht als gültige DateTime erkannt?

String wurde nicht als gültige Datetime erkannt.

-Code ist:

string format = "dd/MM/yyyy"; 

obj.TransDate = DateTime.ParseExact(lbl_TransDate.Text.Split('/')[0] + "/" + lbl_TransDate.Text.Split('/')[1] + "/" + lbl_TransDate.Text.Split('/')[2], format, CultureInfo.InvariantCulture); 

Wenn ich debuggen das Datum, die ich versuche, es zu analysieren ist: 12/4/2012

+2

aus Klar Neugier, warum nicht nur ' DateTime.ParseExact (lbl_TransDate.Text, Format, CultureInfo.InvariantCulture) '? – Vlad

+0

:) es ist nicht mein Code, nur ich diesen Teil testen –

+0

Haben Sie es mit diesem Code überprüfen? DateTime dt; string Temp1 = "Ihr Datum"; if (DateTime.TryParse (Temp1, out dt)) { // Wenn es ein gültiges Datum ist string date = dt.ToShortDateString(); Zeichenfolge Zeit = dt.ToShortTimeString(); } ' – Pankaj

Antwort

9

Das gewünschte Format

string format = "dd/M/yyyy"; 

ist Ich verstehe nicht, eine Sache, warum teilen Sie eine Kette die Schnur, da Sie die gleiche Sache erhalten würden?

Wenn die Eingabe 2012.12.04, nach der Spaltung von ‚/‘, werden Sie 12, 4, 2012 erhalten und sie dann wieder verketten „2012.12.04“ zu erhalten. Warum das?

Auch, wenn Sie wirklich, dass Split benötigen, können Sie speichern in in ein Array, so dass Sie es 3 mal nicht spalten müssen:

var splits = lbl_TransDate.Text.Split('/'); 
DateTime.ParseExact(splits[0] + "/" + splits[1] + "/" + splits[2], ...); 

Wenn Sie die Eingabe nicht vertrauen, die Splits Array möglicherweise nicht von Dauer sein = 3 und mehr davon, können Sie DateTime.TryParseExact

EDIT Sie die Überlastung mit mehreren Formaten verwenden können Also, wenn der Eingang sein könnte 2012.12.04 oder 12/04/2012, können Sie beide Formate

var formats = new[] {"dd/M/yyyy","dd/MM/yyyy"}; 
var date = DateTime.ParseExact("12/4/2012", formats, 
             System.Globalization.CultureInfo.InvariantCulture, 
             System.Globalization.DateTimeStyles.AssumeLocal); 
+0

das' informix' Datum "TT/MM/JJJJ". –

+0

'Die DateTime, die von der Zeichenfolge dargestellt wird, wird im Kalender System.Globalization.GregorianCalendar nicht unterstützt, wenn ich Ihre versuche. –

+0

Die letzte Bearbeitung funktioniert bei mir. Vielen Dank –

1

Sie angeben geben MM, wenn Sie nur eine einzelne Ziffer haben. Verwenden Sie entweder nur eine einzelne M, oder ein Pad, das mit der Funktion PadLeft mit Null verlassen wurde.

Der folgende Code zeigt dies sowohl mit dd und MM nach Wunsch gepolstert

string format = "dd/MM/yyyy"; 
string mydate = "12/4/2012"; 
DateTime t = DateTime.ParseExact(mydate.Split('/')[0].PadLeft(2,'0') + "/" + 
           mydate.Split('/')[1].PadLeft(2,'0') + "/" + 
           mydate.Split('/')[2], format, CultureInfo.InvariantCulture); 

Ausgang ist:

12/04/2012 00:00:00 
2

ich mit den anderen Antworten darüber einig, dass es aussieht wie Ihr viel zu tun zu lösen Was sollte ein einfaches Problem sein. Ich würde das britische Datumsformat aus den Kulturinformationen verwenden.

var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat); 
Verwandte Themen