2010-05-25 27 views
23

¿Alguien puede aconsejar sobre cómo convertir un intervalo de tiempo o int a una cadena de duración ISO8601 como se explica en http://en.wikipedia.org/wiki/ISO_8601#Durations?TimeSpan to ISO8601 formato de duración cadena

"1 hora y 30 minutos" se traduciría en "PT1H30M", por ejemplo:

int duration = 90; 
string isoString = duration.ToIsoDuration(); 
+0

duplicado posible de [¿Cómo convierto un TimeSpan ISO8601 a un C# TimeSpan?] (Http://stackoverflow.com/questions/12466188/how-do-i-convert-an-iso8601-timespan-to-ac-sharp-timespan) – Pekka

+0

NO es un duplicado: el análisis y la representación como una cadena son operaciones separadas. – Brent

Respuesta

40

encontrado la solución a mí mismo, así que pensé que me gustaría compartir:

TimeSpan timeSpan = new TimeSpan(0, value, 0); 
    return XmlConvert.ToString(timeSpan); 
+5

En la primera línea, también puede decir 'TimeSpan timeSpan = TimeSpan.FromMinutes (value);' Eso es más claro en mi opinión. –

+3

Eso es bueno para las duraciones cortas, pero deja de funcionar tan pronto como tenga duraciones de meses o años, porque TimeSpan no puede representar esas duraciones. Simplemente convierte todo en días, lo que es incorrecto ya que no todos los meses tienen el mismo número de días. –

+0

Gracias por esto. Solo pensé que mencionaría que el equivalente de PowerShell es '[System.Xml.XmlConvert] :: ToString ($ timespan)'. – deadlydog