2016-04-29 4 views
0

Ich habe meinen Code hier, der eine String zu DateTime analysiert.Absturz beim Parsen von Datum/Uhrzeit TT/MM/JJJJ hh: mm: ss tt (mit dynamischer Eingabe)

DateTime datenew = DateTime.Parse("05/06/2015 17:18:12"); 
String convertDate = datenew .ToString("MM/dd/yyyy hh:mm:ss tt"); 

Diese Parse konvertiert automatisch die Zeit 16:13:12 zu 05:18:12 PM. Dies funktioniert reibungslos, bis ich ein Format von TT/MM/JJJJ eingegeben (BTW ist dies unabhängig von hh: mm: ss tt oder hh: mm: ss nur. Es spielt keine Rolle). Es löst eine Ausnahme aus.

Zum Beispiel gebe ich 18/02/2015 17:18:12 ein, jetzt löst es einen Fehler aus.

Ich möchte meine Eingabe dynamisch sein, unabhängig von dd/MM/yyyy oder MM/dd/yyyy Format. Ich möchte nur eine Standardausgabe im Format MM/dd/yyyy hh:mm:ss tt.

Irgendwelche Vorschläge?

Bearbeiten.

Exception thrown: 
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll 
Additional information: String was not recognized as a valid DateTime. 
+0

Können Sie die Ausnahmebedingungsnachricht posten? –

+1

Wie soll es sein, ob 05/06 6. Mai oder 5. Juni ist? –

+0

Wie @GrantWinney darauf hinweist, ist das Schreiben von Code, der versucht zu erraten, welches Format ein Datum ist, fast immer eine schlechte Idee. Wählen Sie ein gewünschtes Format und bleiben Sie dabei. – Rob

Antwort

3

Laut meinem Kommentar müssen Sie das Format des Datums bestimmen, bevor Sie versuchen, es zu analysieren. Wo Sie dieses Format definieren, bleibt Ihnen überlassen.

void Main() 
{ 
    var format = GetFormat(); 
    var input = "05/06/2015 17:18:12"; 
    var parsedDate = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture); 
    var output = parsedDate.ToString("MM/dd/yyyy hh:mm:ss tt"); 
} 

string GetFormat() 
{ 
    //Take this from their user, client, file name, etc, etc. 
    //Where this is configured doesn't really matter - but it needs to be somewhere. 

    if (client.IsAmerican) 
    { 
     return "MM/dd/yyyy HH:mm:ss"; 
    } else { 
     return "dd/MM/yyyy HH:mm:ss"; 
    } 
} 
+0

Okay. Ich hole dich jetzt. Ich denke, wir waren jetzt auf der gleichen Seite. Aber wie kann ich damit umgehen? Wenn ich schon am 05.06.2015 05:18:12 eine Eingabe bekommen habe? – WhiteMark

+0

@WhiteMark Das ist in Ordnung, solange Sie das Format kennen, das der Absender verwendet. Wenn Sie das Format nicht kennen, ist es unmöglich zu wissen, um welches Datum es sich handelt. Du kannst nur raten. – Rob

+0

Also gibt es eine Möglichkeit, dass mein Programm abstürzt, wenn ein anderes Datumsformat abgefangen wird? Pfui! Hehe! Danke für diesen ROB! Hilft viel. – WhiteMark

0

ich einen Stich in der Dunkelheit hier nehmen werde und denke, es ist nicht funktioniert, weil es nicht das, was das Datumsformat nicht kennt soll in sein.

Blick auf die ersten beiden Beispiele here, die erklären, wie man die Kultur oder den Stil einstellt.

+0

Ich denke, die DateTime.Parse akzeptiert nur das MM/TT/JJJJ-Format? IDK, wie man das benutzt, wenn die Eingabe TT/MM/JJJJ ist. Weil ich den datoString mit dem benutzerdefinierten Format analysieren muss. Irgendwelche Ideen? – WhiteMark

Verwandte Themen