2013-07-09 26 views
15

Chcę osiągnąć konwersję this, czyli chcę przekonwertować string o formacie hh:mm tt na TimeSpan z zerowymi sekundami.AM/PM to TimeSpan

Na przykład 09:45 pm jest konwertowany na 21:45:00.

+1

"TimeSpan" nie ma formatu. –

Odpowiedz

48

Najprostsze podejście byłoby prawdopodobnie do analizowania go jako DateTime wykorzystaniem DateTime.ParseExact, a następnie użyj TimeOfDay do Dokładna TimeSpan.

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

To dziwne zobaczyć cyfrę 0 na kilka godzin, gdy jesteś również określając AM/PM oznacznik chociaż. Możesz chcieć "h" zamiast "hh" w ciągu formatów, aby "21:45" zamiast "09:45".

(Ja również twierdzę, że to dziwne użycie TimeSpan, ale potem typy danych .NET/date są nieco pomieszane w moim widoku. Zalecam używanie Noda Time, ale jestem stronniczy :)

0
TimeSpan tspan; 

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

Dokładna odpowiedź jest już podana http://stackoverflow.com/a/17553758/3893182 – danopz

2

Ta praca dla mnie.

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

Jego praca w porządku dla mnie, dzięki. – amnippon