2010-05-25 15 views
23

Qualcuno può consigliare su come convertire un intervallo di tempo o di una stringa di durata ISO8601 come spiegato in http://en.wikipedia.org/wiki/ISO_8601#Durations?TimeSpan alla stringa di formato durata ISO8601

"1 ora e 30 minuti" si tradurrebbe in "PT1H30M", per esempio:

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

Possibile duplicato [Come convertire un TimeSpan ISO8601 in un TimeSpan C#?] (Http://stackoverflow.com/questions/12466188/how-do-i-convert-an-iso8601-timespan-to-ac-sharp-timespan) – Pekka

+0

NON un duplicato: l'analisi e la rappresentazione come stringa sono operazioni separate. – Brent

risposta

40

mi sono trovato la soluzione, così ho pensato che vorrei condividere:

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

Nella prima riga, puoi anche dire "TimeSpan timeSpan = TimeSpan.FromMinutes (valore);" Questo è più chiaro secondo me. –

+3

Questo è utile per brevi periodi di tempo, ma smette di funzionare non appena si hanno durate di mesi o anni, perché TimeSpan non può rappresentare tali durate. Converte tutto in giorni, il che non è corretto poiché non tutti i mesi hanno lo stesso numero di giorni. –

+0

Grazie per questo. Ho solo pensato di menzionare l'equivalente di PowerShell è '[System.Xml.XmlConvert] :: ToString ($ timespan)'. – deadlydog