2010-08-11 7 views
17

Öffnen Sie ein ÃœberwachungsfensterWarum verursacht DateTime.ToString ("h") eine Ausnahme?

new DateTime(2010,01,01).ToString("h") 

Gibt:

new DateTime(2010,01,01).ToString("h") eine Ausnahme vom Typ warf System.FormatException

Doch ...

new DateTime(2010,01,01).ToString("h ") 

gibt: "12"

Warum stoppt ein zusätzlicher Speicherplatz diese Format-Ausnahme? Ist das ein Fehler?

+0

Es ist ein benutzerdefiniertes Format, so dass Sie es nicht ohne Leerzeichen hinzufügen können. –

Antwort

38

Es ist, weil es denkt, dass es ein standard format string anstelle von custom one ist, weil es ein einzelnes Zeichen ist.

Ein besserer Weg, dies zu fixieren ist % zu verwenden:

string text = DateTime.Now.ToString("%h"); 

Aus der Dokumentation zu benutzerdefinierten Format-Strings:

Ein benutzerdefinierten Datums- und Uhrzeitformat String von zwei oder mehr Zeichen bestehen . Formatierungsmethoden für Datum und Uhrzeit interpretieren eine beliebige Zeichenfolge als Standardformat für Datum und Uhrzeit Zeichenfolge. Wenn sie das Zeichen nicht als gültigen Formatbezeichner erkennen, geben sie eine FormatException aus. Für Beispiel wird ein Formatstring, der nur des Spezifizierers "h" enthält, interpretiert als ein Standarddatum und Zeitformat Zeichenfolge. In diesem speziellen Fall wird jedoch eine Ausnahme ausgelöst, weil es kein "h" Standarddatum und Zeitformat Spezifizierer gibt.

Um eines der benutzerdefinierten Datum und Uhrzeit Formatbezeich als einzige Spezifizierer in einem Format Zeichenfolge zu verwenden (das heißt, „D“, „F“, „F“, „G“ verwenden " h ", " H "," K "," m "," M "," s "," t "," y ", " z ",": "oder"/"benutzerdefiniertes Format selbst), enthalten ein Leerzeichen vor oder nach dem Spezifizierer, oder enthalten ein Prozent ("%") Format Spezifizierer vor dem einzelnen benutzerdefinierten Datum und Uhrzeit-Spezifizierer.

Zum Beispiel: „% h“ als benutzerdefinierten Datums- und Uhrzeitformat String interpretiert, dass die Stunde von Wert des aktuelle Datum und die Uhrzeit dargestellt zeigt. Sie können auch das "h" oder "h" Format Zeichenfolge verwenden, obwohl dies ein Leerzeichen in der Ergebniszeichenfolge zusammen mit der Stunde enthält. Das folgende Beispiel zeigt diese drei Formate Strings.

+0

Danke Jon, ich denke, das würde Sinn machen. Ich arbeite gerade mit: dte.ToString ("h") .Trim() für jetzt, um das Problem zu umgehen. –

+1

DateTime.Now.ToString ("% h") - das funktioniert für mich, vielen Dank. Ich hätte die offizielle Anleitung anstelle von anderen Webseiten gelesen, denke ich! –

Verwandte Themen