2012-10-24 6 views
15

Sto provando a recuperare un intervallo di tempo da una stringa, ma TryParseExact restituisce false (esito negativo).TimeSpan.TryParseExact non funziona

Non riesco a vedere cosa sto facendo male, puoi aiutare? Ho provato 2 versioni della mia linea nel codice, entrambe non funzionano.

TimeSpan.TryParseExact("04:00:01","HH:mm:ss",CultureInfo.CurrentCulture, out aTime) 

e

TimeSpan.TryParseExact("04:00:01","HH:mm:ss", null, out aTime) 

EDIT: entrambe le risposte qui sono corrette, ho il formato sbagliato per il mio formato periodo personalizzato - l'errore che ho fatto è quello di pensare che i formati personalizzati per DateTime funzionerebbero per TimeSpans, ma non lo fanno.

risposta

27

Il problema è semplicemente nella stringa di formato per il periodo che hai, è stato specificato "HH:mm:ss". L'identificatore HH (maiuscolo) non è valido per l'intervallo di tempo. Dovresti usare hh. Le stringhe di formato sono infatti sensibili al maiuscolo/minuscolo.

Il carattere due punti (:) ha anche bisogno di essere sfuggito, in modo da utilizzare "hh\\:mm\\:ss", @"hh\:mm\:ss" o "hh':'mm':'ss". Tutte e tre le forme avranno lo stesso effetto.

È possibile rivedere un elenco di stringhe di formato personalizzato valide per TimeSpan here. e le stringhe di formato standard per TimeSpan sono here.

Mentre HH è valido per DateTime e DateTimeOffset dove rappresenta il formato di 24 ore e in minuscolo hh rappresenta un orologio di 12 ore, Per TimeSpan - il componente di ore è sempre basato su 24 ore. Si potrebbe pensare che il formato HH sia quello scelto, per uniformità, ma no - è hh.

+0

grazie, non mi sono reso conto che le stringhe personalizzate per DateTime e TimeSpan erano diverse. – mcmillab

+0

MS è STUPID in modo che i formati DateTime e Timestamp siano diversi. Grazie per la risposta. – Mensur

+0

Sì "HH: mm: ss" restituisce false. Dovevo anche scappare personaggi del colon come diceva Oğuz Yıldız. Quindi, il mio formato è "hh \\: mm \\: ss". È una combinazione delle due risposte. – user1011138

1

Il formato di stringa che si sta passando è errato.

var res=TimeSpan.TryParseExact("04:00:01", "g", CultureInfo.CurrentCulture, out aTime); 

g- Formato breve generale ed è sensibile alla cultura.

Maggiori informazioni su questo qui Standard Timespan Format Strings

+0

ok, ma ho fornito una stringa di formato personalizzato, perché non funziona? – mcmillab

+0

ho provato questo e il suo funzionamento. Cosa esattamente non funziona per te –

+0

Ho provato il tuo suggerimento, e sì, funziona, ma mi piacerebbe ancora capire perché il mio non ha funzionato. – mcmillab

2

Probabilmente è necessario menzionare che è necessario sfuggire al carattere del colon.

TryParseExact("04:00:01", "HH\\:mm\\:ss" ...