¿Cómo convierto un TimeSpan ISO8601 a un C # TimeSpan?

System.FormatException cuando bash hacer lo siguiente (como ejemplo):

 TimeSpan ts = XmlConvert.ToTimeSpan("P72H"); 

Investigué el estándar ISO8601 y parece ser correcto, pero no logro procesarlo sin lanzar una excepción, haga lo que haga.

¡Gracias!

EDITAR:

Detalle de la excepción:

 System.FormatException was unhandled by user code HResult=-2146233033 Message=The string 'P72H' is not a valid TimeSpan value. Source=System.Xml 

Necesita agregar el separador de tiempo a su cadena. Prueba esto:

 TimeSpan ts = XmlConvert.ToTimeSpan("PT72H"); 

Consulte la especificación de duración: http://www.w3.org/TR/xmlschema-2/#duration

3.2.6.1 Representación léxica
La representación léxica para la duración es el formato extendido [ISO 8601] PnYn MnDTnH nMnS, donde nY representa el número de años, nM el número de meses, nD el número de días, ‘T’ es el separador de fecha / hora, nH el número de horas, nM el número de minutos y nS el número de segundos. El número de segundos puede incluir dígitos decimales con precisión arbitraria.

Debes haber perdido algo en el estándar. El seguimiento:

 System.Xml.XmlConvert.ToString(TimeSpan.FromHours(12)) 

me da la cadena PT12H . Entonces parece que la porción de tiempo necesita un prefijo T Y lo siguiente analiza correctamente:

 System.Xml.XmlConvert.ToTimeSpan("PT25H") 

(Para un TimeSpan que se corrige a 1.01:00:00 ).

Utilice el siguiente formato para System.Xml.XmlConvert.ToTimeSpan("PnYnMnDTnHnMnS") .

P – El designador debe colocarse antes del formato de fecha.

nY – Número de años, ej: 2Y
nM – Número de meses ex: 4M
nD – Número de días ex: 6D

T – El designador que debe colocarse antes del formato de tiempo

nH – Número de horas ex: 8H
nM – Cantidad de minutos ex: 12M
nS – Número de segundos, por ejemplo: 14S

System.Xml.XmlConvert.ToTimeSpan("P2Y4M6DT8H14M18S")

Aquí, la parte de confusión con Mes y Minutos tiene la misma letra para indicar, pero el uso del designador los separa para comprender fácilmente.