2013-07-09 13 views
15

Ich möchte das Gegenteil von this erreichen, das heißt, ich möchte eine string mit Format hh:mm tt in eine TimeSpan mit zero Sekunden konvertieren.AM/PM zu TimeSpan

Zum Beispiel wird 09:45 pm in 21:45:00 konvertiert.

+1

Ein 'TimeSpan' hat kein Format. –

Antwort

48

Der einfachste Ansatz wäre es wahrscheinlich als DateTime zu analysieren DateTime.ParseExact verwenden und dann die TimeOfDay verwenden, um die TimeSpan exakt.

DateTime dateTime = DateTime.ParseExact(text, 
            "hh:mm tt", CultureInfo.InvariantCulture); 
TimeSpan span = dateTime.TimeOfDay; 

Es ist seltsam, eine führende 0 auf eine Anzahl von Stunden, um zu sehen, wenn Sie aber auch Angabe einer am/pm Bezeichner sind. Sie könnten "h" anstelle von "hh" in der Formatzeichenfolge verwenden, um "9:45 pm" statt "21:45 pm" zuzulassen.

(Ich würde auch argumentieren, dass es eine seltsame Verwendung von TimeSpan an erster Stelle ist, aber dann sind die .NET-Datum/Uhrzeit-Typen aus meiner Sicht etwas vermasselt. Ich würde empfehlen, Noda Time zu verwenden, aber ich bin voreingenommen :)

0
TimeSpan tspan; 

tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay; 
+0

Genaue Antwort ist bereits gegeben http://stackoverflow.com/a/17553758/3893182 – danopz

2

Diese Arbeit für mich.

TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay; 
+0

Seine Arbeit gut für mich, danke. – amnippon

Verwandte Themen