2010-08-11 2 views
17

Aprire una finestra di controlloPerché DateTime.ToString ("h") causa un'eccezione?

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

Dà:

new DateTime(2010,01,01).ToString("h") ha generato un'eccezione di tipo System.FormatException

Eppure ...

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

assicura: "12"

Quindi, perché uno spazio extra impedisce questa eccezione di formato? Si tratta di un bug?

+0

è un formato personalizzato per cui non è possibile aggiungerlo senza spazio. –

risposta

38

È perché si pensa che sia un standard format string anziché un custom one, a causa di un singolo carattere.

Un modo migliore di fissare questo è quello di utilizzare %:

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

Dalla documentazione su stringhe di formato personalizzato:

Una stringa di formato di data e ora personalizzato costituito da due o più caratteri . I metodi di formattazione di data e ora interpretano qualsiasi stringa di singolo carattere come una stringa di formato di data e ora standard . Se non riconoscono il carattere come identificatore di formato valido, lanciano un FormatException. Nell'esempio , una stringa di formato costituita da solo con l'identificatore "h" è interpretata come una data standard e la stringa di formato ora . Tuttavia, in questo caso particolare, , un'eccezione è generata perché non è presente l'identificatore "h" data standard e timeformat .

Per utilizzare una delle caratteristiche di data e ora identificatori di formato come unico specificatore in una stringa di formato (cioè, per utilizzare la "d", "f", "F", "g", " h ", " H "," K "," m "," M "," s "," t "," y ", " z ",": "o"/"formato personalizzato specificatore di stesso), includere uno spazio prima o dopo lo specificatore oppure includere un identificatore di percentuale ("%") prima del singolo identificatore di data e ora personalizzato.

Ad esempio, "% h" viene interpretato come una data e ora personalizzata formato stringa che visualizza l'ora rappresentata dalla la data corrente e valore temporale. È inoltre possibile utilizzare la stringa del formato "h" o "h" , anche se questo include uno spazio nella stringa del risultato insieme all'ora . L'esempio seguente illustra queste tre stringhe di formato.

+0

Grazie Jon, immagino che avrebbe senso. Sto solo lavorando con: dte.ToString ("h") .Trim() per ora per aggirare il problema. –

+1

DateTime.Now.ToString ("% h") - che funziona per me, molte grazie. Avrei dovuto leggere il manuale ufficiale invece di altri siti Web, immagino! –