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