Есть ли встроенный способ в .NET 3.5 для преобразования периода ISO 8601 в .NET TimeSpan/ticks/milliseconds?Преобразование времени отформатированного ISO 8601 в тики/миллисекунды
ответ
К сожалению, в .NET нет ничего, что можно было бы встроить в .NET.
И еще нет TimeSpan.ParseExact
до .NET 4, который может быть использован, если известны компоненты строки.
ответил, что ответил первым. – yas4891
Даже если ничего нет в каркасе .Net, я обнаружил, что Joda.org внедрил такую вещь, и я вспомнил, что Jon сделал порт этого .Net под названием noda-time.
Первый взгляд на this source code показывает, что он реализовал что-то здесь для этой цели. Возможно, вам следует провести дополнительные исследования в этом проекте.
Спасибо за эту ссылку. довольно впечатляющая работа там – yas4891
Нет встроенного способа. Для дальнейшего усложнения вещей 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);
Для моей конкретной задачи это обычно должно быть чем-то вроде «PT1S» или «PT0.05999999999S», поэтому синтаксический анализ не является реальной проблемой. Просто хотел получить хорошее решение для этого. Спасибо за Ваш ответ! – yas4891
XmlConvert.ToTimeSpan
, кажется, был вокруг навсегда и делает именно то, что вы хотите.
@Timwi: Я большой поклонник краткости. Тем не менее, я также очень дружелюбный человек. Итак, что не так с желанием всем хорошо провести день? – yas4891
, потому что стиль SO (и других сетевых сайтов Stack Exchange) заключается в том, чтобы не делать этого. Для обсуждения используйте http://meta.stackoverflow.com. – Richard
Убрав его, я не говорю, что он не дружелюбен. Просто он ничего не может внести в вопрос. Помните, что это не дискуссионный форум с индивидуальными сообщениями. – Timwi