2010-08-18 12 views
10

¿Hay una forma incorporada en .NET 3.5 para convertir un período ISO 8601 en .NET TimeSpan/ticks/milisegundos?Convierta el período de formato de ISO 8601 a ticks/milisegundos

+0

@Timwi: soy un gran admirador de la brevedad. Sin embargo, también soy una persona amigable de forma natural. Entonces, ¿qué hay de malo en desear a todos un buen día de trabajo? – yas4891

+0

porque el estilo de SO (y otros sitios de red de Stack Exchange) es no hacerlo. Para discusión use http://meta.stackoverflow.com. – Richard

+0

Al eliminarlo, no estoy indicando que no sea amigable. Es solo que realmente no contribuye en nada a la pregunta. Recuerde que este no es un foro de discusión con publicaciones individualizadas. – Timwi

Respuesta

1

Desafortunadamente no hay nada directamente incorporado en .NET.

Y no hay TimeSpan.ParseExact antes de .NET 4 que podría utilizarse si se conocen los componentes de la cadena.

+0

marcado respondió por ser el primero en responder. – yas4891

2

Incluso si no hay nada directamente en .Net framework, encontré que Joda.org ha implementado tal cosa y recordé que Jon hizo un puerto a .Net llamado noda-time.

Una primera vista en this source code muestra que implementó algo aquí para este propósito. Tal vez deberías hacer más investigaciones en este proyecto.

+0

Gracias por ese enlace. bastante impresionante trabajo realizado allí – yas4891

1

No hay una forma incorporada. Para complicar aún más las cosas, ISO 8601 durations es, de hecho, totalmente incompatible con TimeSpan o cualquier otra forma exacta de medir el tiempo. La razón es que las duraciones ISO 8601 pueden contener años y meses. El problema con eso es que un año puede tener 365 o 366 días y un mes de 28 a 31 días. Joda-Time solves this problema al relacionar tales períodos inexactos con un instante en el tiempo.

A menos que sea suerte y los períodos de pasar a utilizar la P [AAAA] - [MM] - [hh] [DD] T: [mm]: formato [ss] porque entonces simplemente:

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

Para mi tarea específica, esto normalmente debería ser algo así como "PT1S" o "PT0.05999999999S", por lo que el análisis no es un problema real. Solo quería obtener una buena solución para eso. ¡Gracias por tu respuesta! – yas4891

Cuestiones relacionadas