Codeman Codeman - 2 months ago 34
C# Question

How do I convert an ISO8601 TimeSpan to a C# TimeSpan?

I am getting a

System.FormatException
when I try to do the following (as an example):

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


I've investigated the ISO8601 Standard and it seems to be correct, but I cannot get it to parse hours without throwing an exception, no matter what I do.

Thanks!

EDIT:

Exception detail:


System.FormatException was unhandled by user code

HResult=-2146233033

Message=The string 'P72H' is not a valid TimeSpan value.

Source=System.Xml

Answer

You need to add the Time separator to your string. Try this:

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

See the duration specification - http://www.w3.org/TR/xmlschema-2/#duration

3.2.6.1 Lexical representation
The lexical representation for duration is the [ISO 8601] extended format PnYn MnDTnH nMnS, where nY represents the number of years, nM the number of months, nD the number of days, 'T' is the date/time separator, nH the number of hours, nM the number of minutes and nS the number of seconds. The number of seconds can include decimal digits to arbitrary precision.

Comments