Есть ли в .NET 3.5 встроенный способ преобразования периода ISO 8601 в .NET TimeSpan / ticks / миллисекунды?
К сожалению, в .NET ничего не встроено.
И нет TimeSpan.ParseExact
до .NET 4, который можно было бы использовать, если известны компоненты строки.
Встроенного способа нет. Чтобы еще больше усложнить ситуацию, Продолжительность ISO 8601 на самом деле полностью несовместима с TimeSpan или любым другим точным способом измерения времени. Причина в том, что продолжительность ISO 8601 может содержать годы и месяцы. Проблема в том, что в году может быть 365 или 366 дней, а в месяце - от 28 до 31 дня. Joda-Time решает эту проблему, связывая такие неточные периоды с моментом времени.
Если вам не повезет и периоды не будут использовать формат P [ГГГГ] - [ММ] - [ДД] T [чч]: [мм]: [сс], потому что тогда вы просто:
string period = "P0003-06-04T12:30:05";
TimeSpan span = new TimeSpan(DateTime.Parse(period.Remove(0,1)).Ticks);
Даже если в среде .Net ничего нет, я обнаружил, что Joda.org реализовал такую вещь, и вспомнил, что Джон перенес ее на .Net называется noda-time .
Первый взгляд на этот исходный код показывает, что он что-то реализовал здесь для этой цели. Возможно, вам стоит провести дополнительные исследования в этом проекте.