2010-05-25 3 views
23

Может ли кто-нибудь сообщить о том, как преобразовать временной интервал или int в строку длительности ISO8601, как описано в http://en.wikipedia.org/wiki/ISO_8601#Durations?TimeSpan для строки формата длительности ISO8601

"1 час и 30 минут" приведет к "PT1H30M", например:

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

Возможный дубликат [Как конвертировать ISO8601 TimeSpan в C# TimeSpan?] (Http://stackoverflow.com/questions/12466188/how-do-convert-an-iso8601-timespan-to-ac-sharp-timespan) – Pekka

+0

NOT duplicate - синтаксический анализ и представление в виде строки - это отдельные операции. – Brent

ответ

40

нашел решение сам, поэтому я думал, что я разделю:

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

В первой строке вы также можете сказать «TimeSpan timeSpan = TimeSpan.FromMinutes (значение)». Это более понятно, на мой взгляд. –

+3

Это хорошо для коротких периодов времени, но оно перестает работать, как только у вас есть месяцы или годы, потому что TimeSpan не может представлять эти длительности. Он просто преобразует все обратно в дни, что неверно, поскольку не все месяцы имеют одинаковое количество дней. –

+0

Спасибо за это. Я просто подумал, что я бы упомянул эквивалент PowerShell: '[System.Xml.XmlConvert] :: ToString ($ timespan)'. – deadlydog

Смежные вопросы