2010-08-18 5 views
10

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

+0

@Timwi: Я большой поклонник краткости. Тем не менее, я также очень дружелюбный человек. Итак, что не так с желанием всем хорошо провести день? – yas4891

+0

, потому что стиль SO (и других сетевых сайтов Stack Exchange) заключается в том, чтобы не делать этого. Для обсуждения используйте http://meta.stackoverflow.com. – Richard

+0

Убрав его, я не говорю, что он не дружелюбен. Просто он ничего не может внести в вопрос. Помните, что это не дискуссионный форум с индивидуальными сообщениями. – Timwi

ответ

1

К сожалению, в .NET нет ничего, что можно было бы встроить в .NET.

И еще нет TimeSpan.ParseExact до .NET 4, который может быть использован, если известны компоненты строки.

+0

ответил, что ответил первым. – yas4891

2

Даже если ничего нет в каркасе .Net, я обнаружил, что Joda.org внедрил такую ​​вещь, и я вспомнил, что Jon сделал порт этого .Net под названием noda-time.

Первый взгляд на this source code показывает, что он реализовал что-то здесь для этой цели. Возможно, вам следует провести дополнительные исследования в этом проекте.

+0

Спасибо за эту ссылку. довольно впечатляющая работа там – yas4891

1

Нет встроенного способа. Для дальнейшего усложнения вещей ISO 8601 durations фактически полностью несовместим с TimeSpan или любым другим точным способом измерения времени. Причина в том, что длительность ISO 8601 может содержать годы и месяцы. Проблема в том, что год может иметь 365 или 366 дней и месяц от 28 до 31 дня. Joda-Time solves this Проблема, связанная с такими неточными периодами до момента времени.

Если вы не повезло, и периоды случаются использовать P [YYYY] - [MM] - [DD] T [чч]: [мм]: [сс] формат, потому что тогда вам просто:

string period = "P0003-06-04T12:30:05"; 
TimeSpan span = new TimeSpan(DateTime.Parse(period.Remove(0,1)).Ticks); 
+0

Для моей конкретной задачи это обычно должно быть чем-то вроде «PT1S» или «PT0.05999999999S», поэтому синтаксический анализ не является реальной проблемой. Просто хотел получить хорошее решение для этого. Спасибо за Ваш ответ! – yas4891