2010-05-25 14 views
23

Czy ktoś może doradzić, w jaki sposób przekonwertować termin lub int na ciąg znaków ISO8601, jak wyjaśniono w http://en.wikipedia.org/wiki/ISO_8601#Durations?TimeSpan do formatu czasu trwania ISO8601 ciąg znaków

"1 godzina i 30 minut" doprowadziłoby "PT1H30M", na przykład:

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

Możliwa duplikat [Jak przekonwertować TimeSpan ISO8601 na C# TimeSpan?] (Http://stackoverflow.com/questions/12466188/how-do-i-concon-an-iso8601-timespan-to-ac-sharp-timespan) – Pekka

+0

NIE duplikat - parsowanie i reprezentowanie jako ciąg to oddzielne operacje. – Brent

Odpowiedz

40

znaleźć rozwiązanie siebie, więc pomyślałem, że podzielę:

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

W pierwszym wierszu możesz także powiedzieć: 'TimeSpan timeSpan = TimeSpan.FromMinutes (value);' To jest bardziej zrozumiałe w mojej opinii. –

+3

To jest dobre na krótkie okresy, ale przestaje działać tak szybko, jak masz miesiące lub lata, ponieważ TimeSpan nie może reprezentować tych czasów. Po prostu konwertuje wszystko z powrotem na dni, co jest nieprawidłowe, ponieważ nie wszystkie miesiące mają tę samą liczbę dni. –

+0

Dzięki za to. Pomyślałem tylko, że wspomnę o równoważniku PowerShell jest "[System.Xml.XmlConvert] :: ToString ($ timespan)'. – deadlydog

Powiązane problemy