2013-07-09 16 views
15

Desidero raggiungere il valore di this, ovvero, voglio convertire un con il formato hh:mm tt a un numero TimeSpan con secondi azzerati.AM/PM a TimeSpan

Ad esempio, 09:45 pm viene convertito in 21:45:00.

+1

Un 'TimeSpan' non ha un formato. –

risposta

48

L'approccio più semplice sarebbe probabilmente per analizzare come DateTime utilizzando DateTime.ParseExact, e quindi utilizzare il TimeOfDay di esigere il TimeSpan.

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

E 'strano vedere un 0 su un certo numero di ore quando si è anche specificando un/pm designatore del mattino però. Potresti volere "h" invece di "hh" nella stringa di formato, per consentire "9:45 pm" anziché "09:45 pm".

(Direi anche che si tratta di uno strano uso di TimeSpan in primo luogo, ma i tipi di data/ora .NET sono un po 'incasinati nella mia vista. Suggerirei di usare Noda Time, ma io sono parziale :)

0
TimeSpan tspan; 

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

La risposta esatta è già disponibile http://stackoverflow.com/a/17553758/3893182 – danopz

2

Questo lavoro per Me.

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

Il suo lavoro va bene per me, grazie. – amnippon