2012-09-22 20 views
9

Ich versuche ein TimeSpan zu string zu formatieren. Dann bekomme ich Ablaufdatum von MSDN, um mein benutzerdefiniertes String-Format zu generieren. Aber es sind keine Worte. Es gibt "FormatException" zurück.TimeSpan ToString "[d.] Hh: mm"

Warum? Ich verstehe nicht ...

var ts = new TimeSpan(0, 3, 25, 0); 
var myString = ts.ToString("[d'.']hh':'mm"); 

Antwort

9

Ich nehme an, Sie versuchen, etwas wie die optionalen Tag und Sekundenbruchteile der c standard format zu tun. Soweit ich das beurteilen kann, ist dies mit benutzerdefinierten Formatzeichenfolgen nicht direkt möglich. TimeSpan FormatString with optional hours ist die gleiche Art von Frage, die Sie haben, und ich würde etwas ähnlich zu ihrer Lösung vorschlagen: Haben Sie eine Erweiterungs-Methode, um die Formatzeichenfolge für Sie zu erstellen.

public static string ToMyFormat(this TimeSpan ts) 
{ 
    string format = ts.Days >= 1 ? "d'.'hh':'mm" : "hh':'mm"; 
    return ts.ToString(format); 
} 

Dann, es zu benutzen:

var myString = ts.ToMyFormat(); 
+0

Ja, es wird sicher funktionieren. Aber ich würde das ToString-Format verwenden. MSDN sagt, dass ich "[" und "]" verwenden kann. Ist es wahr? – riofly

+0

Wo sagt es das? Das einzige Mal, dass ich "[' '' '' '' ''bemerkte, war, wie es die Standardformatzeichenfolgen beschreibt, aber ohne zu sagen, dass Sie diese magischen Symbole in benutzerdefinierten Formaten verwenden können. –

+0

Sorry, tatsächlich lag ich falsch. – riofly

3

Dieser Fehler tritt normalerweise auf, wenn Sie Symbole verwenden, die Bedeutungen in der Formatzeichenfolge definiert haben. Der beste Weg, diese zu debuggen, ist selektiv zu entfernen, bis es funktioniert. Das letzte entfernte Zeichen war das Problem.

In diesem Fall, mit Blick auf die custom TimeSpan format strings, sind die eckigen Klammern das Problem. Entfliehen Sie sie mit „\“, zum Beispiel:

var ts = new TimeSpan(0, 3, 25, 0); 
var myString = ts.ToString("\\[d'.'\\]hh':'mm"); 

[Edit: Added]

Es gibt keine Möglichkeit, auf den Kunden individuelle Span Formatstrings Seite Text wegzulassen erwähnt ist, wenn Werte 0. In diesem Fall sind , betrachten Sie eine if Anweisung oder den ?: Operator.

+0

Ja, ich weiß, dass die eckigen Klammern das Problem sind. Aber ich schaue, dass ich "[" und "]" verwenden kann, um Tage zurückzugeben, nur wenn der Wert> = 0 ist. Ist es möglich? – riofly

+0

@riofly Es scheint keine Möglichkeit zu geben, einen Teil der Zeichenfolge wegzulassen, wenn in http://msdn.microsoft.com/en-us/library/ee372287.aspx ein Wert 0 ist. Vielleicht ah wenn Aussage besser ist. Die Antwort wurde aktualisiert. – akton

Verwandte Themen