To przełomowa zmiana.
Patrz: Formatting and Parsing Time Intervals in the .NET Framework 4
In the .NET Framework 3.5 and earlier versions, TimeSpan does not implement IFormattable
, nor does it support format strings. Therefore, the “r” format string is ignored, and the parameterless TimeSpan.ToString method is called. In the .NET Framework 4, on the other hand, TimeSpan.ToString(String, IFormatProvider) is called and passed the unsupported format string, which causes the exception.
Wystarczy rozwinąć na odpowiedź, oryginalny kod w .NET Framework 2.0 nie wyjątek, ale to nie daje pożądany wynik, (minuty: sekundy). Ponieważ parametrem less constructor byłoby wywołanie TimeSpan
, ignorując format określony w String.Format
. Ale, z .Net framework 4.0 lub hgiher, ponieważ TimeSpan
implementuje IFormattable
, format określony mm:ss
zostanie przekazany do połączenia ToString
. Teraz ten format mm:ss
jest nieprawidłowy dla TimeSpan
, wymaga dwukropka, aby można było go uciec z tylnym ukośnikiem, takim jak: mm\:ss
. Właśnie dlatego dostajesz wyjątek.
Patrz: Custom TimeSpan Format Strings
w .NET 3.5 lub obniżyć można użyć:
TimeSpan elapsed = DateTime.Now - renderStartTime; //or DateTime.Now.Subtract(renderStartTime)
string formatted = string.Format("Init took {0}:{1}", elapsed.Minutes, elapsed.Seconds); //returns minutes and seconds components,
// If you are looking for Total Minutes and Total Seconds then use TotalMinutes/TotalSeconds
w .NET Framework 4.0 lub wyższy można zrobić:
string.Format("Init took {0:mm\\:ss}", elapsed);
usunąć oddanych do obiektu. –
ustalono, że @HighCore jest niepotrzebnym rzutem, jednak wyjątek jest nadal rzucany bez niego – Matt
jak pokazano w odpowiedziach [tutaj] (http://stackoverflow.com/questions/574881/how-can-can-format-a- timespan-object-with-a-custom-format-in-net) nastąpiła przełomowa zmiana z formatowaniem TimeSpans z .NET 3.5 na .NET 4.0 – Jonesopolis