Преобразование ISO 8601-отформатированного периода времени в тики/миллисекунды

Есть ли встроенный способ в .NET 3.5 для преобразования ISO 8601 в .NET TimeSpan/ticks/milliseconds?

Ответ 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);