2014-06-23 13 views
13

Vorrei sapere se esiste un modo per convertire una stringa formattata in formato 24 ore in un TimeSpan.Come convertire la stringa "07:35" (HH: MM) in TimeSpan

In questo momento ho un "stile old fashion":

string stringTime = "07:35"; 
string[] values = stringTime.Split(':'); 

TimeSpan ts = new TimeSpan(values[0], values[1], 0); 
+3

Utilizzare TimeSpan.Parse. http://msdn.microsoft.com/en-us/library/se73z7b9(v=vs.110).aspx –

+0

possibile duplicato di [Analizza stringa su TimeSpan] (http://stackoverflow.com/questions/26760/parse-string-to-timespan) –

risposta

43

Mentre corretto che questo funzionerà:

TimeSpan time = TimeSpan.Parse("07:35"); 

E se lo si utilizza per la convalida ...

TimeSpan time; 
if (!TimeSpan.TryParse("07:35", out time)) 
{ 
    // handle validation error 
} 

Si consideri che TimeSpan prevede principalmente per lavorare con il tempo trascorso, piuttosto che ora del giorno. Accetta valori superiori a 24 ore e accetta anche valori negativi.

Se è necessario verificare che la stringa di input è una valida ora del giorno (> = 00:00 e < 24:00), allora si dovrebbe prendere in considerazione questo, invece:

DateTime dt; 
if (!DateTime.TryParseExact("07:35", "HH:mm", CultureInfo.InvariantCulture, 
               DateTimeStyles.None, out dt)) 
{ 
    // handle validation error 
} 
TimeSpan time = dt.TimeOfDay; 

Come aggiunto vantaggio, questo analizzerà anche i tempi formattati di 12 ore quando è incluso un AM o un PM, purché sia ​​fornita la stringa di formato appropriata, come ad esempio "h:mm tt".

+2

'DateTime.TryParse' è abbastanza lento,' DateTime.TryParseExact' è miglia più veloce. La mia comprensione è 'TryParse' prova un insieme di pattern per vedere se c'è una corrispondenza, se il formato che stai cercando è in fondo a quell'elenco, è un overhead sostanziale che è facilmente evitato – Joe

2

Prova

var ts = TimeSpan.Parse(stringTime); 

Con una recente .NET hai anche

Questo è l'idioma generale per l'analisi di stringhe in .NET con la prima versione che gestisce stringhe errate generando FormatException e quest'ultimo che consente a TryParse Boolean di fornire direttamente le informazioni.

0

È possibile convertire l'ora utilizzando il seguente codice.

TimeSpan _time = TimeSpan.Parse("07:35"); 

Ma se si vuole ottenere l'ora attuale del giorno è possibile utilizzare il seguente codice:

TimeSpan _CurrentTime = DateTime.Now.TimeOfDay; 

Il risultato sarà:

03:54:35.7763461 

Con un oggetto cantain la Ore, minuti, secondi, zecche, ecc.